public static String lookupExplanationPhrase(Keyword phrasekey, Cons modifiers, Keyword audience) {
    { HashTable vocabulary = ((HashTable)(Logic.$EXPLANATION_VOCABULARIES$.lookup(((audience != null) ? audience : ((Keyword)(Logic.$EXPLANATION_AUDIENCE$.get()))))));
      Cons entry = Stella.NIL;
      String bestphrase = null;
      int bestscore = -1;

      if (vocabulary == null) {
        vocabulary = ((HashTable)(Logic.$EXPLANATION_VOCABULARIES$.lookup(Logic.KWD_TECHNICAL)));
      }
      if (phrasekey == null) {
        phrasekey = Logic.KWD_UNKNOWN_RULE;
      }
      entry = ((Cons)(vocabulary.lookup(phrasekey)));
      if (entry == null) {
        vocabulary = ((HashTable)(Logic.$EXPLANATION_VOCABULARIES$.lookup(Logic.KWD_TECHNICAL)));
        entry = ((Cons)(vocabulary.lookup(phrasekey)));
      }
      if (entry == null) {
        return (Logic.lookupExplanationPhrase(Logic.KWD_UNKNOWN_RULE, Stella.NIL, audience));
      }
      { Cons phrase = null;
        Cons iter000 = entry;

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
          phrase = ((Cons)(iter000.value));
          { boolean testValue000 = false;

            { boolean alwaysP000 = true;

              { Stella_Object mod = null;
                Cons iter001 = phrase.rest;

                loop001 : for (;!(iter001 == Stella.NIL); iter001 = iter001.rest) {
                  mod = iter001.value;
                  if (!modifiers.membP(mod)) {
                    alwaysP000 = false;
                    break loop001;
                  }
                }
              }
              testValue000 = alwaysP000;
            }
            if (testValue000) {
              testValue000 = phrase.rest.length() > bestscore;
            }
            if (testValue000) {
              bestscore = phrase.rest.length();
              bestphrase = ((StringWrapper)(phrase.value)).wrapperValue;
            }
          }
        }
      }
      return (bestphrase);
    }
  }