docs: private boolean hasPassiveProgressiveAuxiliary(Tree[] kids, HashSet<String> verbalSet) {
      if (DEBUG) {
        System.err.println("Checking for passive/progressive auxiliary");
      }
      boolean foundPassiveVP = false;
      boolean foundPassiveAux = false;
      for (Tree kid : kids) {
        if (DEBUG) {
          System.err.println("  checking in " + kid);
        }
        if (kid.isPreTerminal()) {
          Label kidLabel = kid.label();
          String tag = null;
          if (kidLabel instanceof HasTag) {
            tag = ((HasTag) kidLabel).tag();
          }
          if (tag == null) {
            tag = kid.value();
          }
          Label wordLabel = kid.firstChild().label();
          String word = null;
          if (wordLabel instanceof HasWord) {
            word = ((HasWord) wordLabel).word();
          }
          if (word == null) {
            word = wordLabel.value();
          }
  
          if (DEBUG) {
            System.err.println("Checking " + kid.value() + " head is " + word + '/' + tag);
          }
          String lcWord = word.toLowerCase();
          if (verbalTags.contains(tag) && verbalSet.contains(lcWord)) {
            if (DEBUG) {
              System.err.println("hasPassiveProgressiveAuxiliary found passive aux");
            }
            foundPassiveAux = true;
          }
        } else if (kid.isPhrasal()) {
          Label kidLabel = kid.label();
          String cat = null;
          if (kidLabel instanceof HasCategory) {
            cat = ((HasCategory) kidLabel).category();
          }
          if (cat == null) {
            cat = kid.value();
          }
          if ( ! cat.startsWith("VP")) {
            continue;
          }
          if (DEBUG) {
            System.err.println("hasPassiveProgressiveAuxiliary found VP");
          }
          Tree[] kidkids = kid.children();
          boolean foundParticipleInVp = false;
          for (Tree kidkid : kidkids) {
            if (DEBUG) {
              System.err.println("  hasPassiveProgressiveAuxiliary examining " + kidkid);
            }
            if (kidkid.isPreTerminal()) {
              Label kidkidLabel = kidkid.label();
              String tag = null;
              if (kidkidLabel instanceof HasTag) {
                tag = ((HasTag) kidkidLabel).tag();
              }
              if (tag == null) {
                tag = kidkid.value();
              }
              // we allow in VBD because of frequent tagging mistakes
              if ("VBN".equals(tag) || "VBG".equals(tag) || "VBD".equals(tag)) {
                foundPassiveVP = true;
                if (DEBUG) {
                  System.err.println("hasPassiveAuxiliary found VBN/VBG/VBD VP");
                }
                break;
              } else if ("CC".equals(tag) && foundParticipleInVp) {
                foundPassiveVP = true;
                if (DEBUG) {
                  System.err.println("hasPassiveAuxiliary [coordination] found (VP (VP[VBN/VBG/VBD] CC");
                }
                break;
              }
            } else if (kidkid.isPhrasal()) {
              String catcat = null;
              if (kidLabel instanceof HasCategory) {
                catcat = ((HasCategory) kidLabel).category();
              }
              if (catcat == null) {
                catcat = kid.value();
              }
              if ("VP".equals(catcat)) {
                if (DEBUG) {
                  System.err.println("hasPassiveAuxiliary found (VP (VP)), recursing");
                }
                foundParticipleInVp = vpContainsParticiple(kidkid);
              } else if (("CONJP".equals(catcat) || "PRN".equals(catcat)) && foundParticipleInVp) { // occasionally get PRN in CONJ-like structures
                foundPassiveVP = true;
                if (DEBUG) {
                  System.err.println("hasPassiveAuxiliary [coordination] found (VP (VP[VBN/VBG/VBD] CONJP");
                }
                break;
              }
            }
          }
        }
        if (foundPassiveAux && foundPassiveVP) {
          break;
        }
      } // end for (Tree kid : kids)
      if (DEBUG) {
        System.err.println("hasPassiveProgressiveAuxiliary returns " + (foundPassiveAux && foundPassiveVP));
      }
      return foundPassiveAux && foundPassiveVP;
    }