public static String makeRuleOriginExplanationPhrase(Justification self) {
    { Proposition satellite = self.proposition;
      Proposition master = ((Proposition)(KeyValueList.dynamicSlotValue(satellite.dynamicSlots, Logic.SYM_LOGIC_MASTER_PROPOSITION, null)));
      Description head = ((Description)((satellite.arguments.theArray)[1]));
      Description tail = ((Description)((satellite.arguments.theArray)[0]));
      NamedDescription namedsource = null;
      Description source = null;

      { int i = Stella.NULL_INTEGER;
        int iter000 = 1;
        int upperBound000 = 4;

        loop000 : for (;iter000 <= upperBound000; iter000 = iter000 + 1) {
          i = iter000;
          switch (i) {
            case 1: 
              source = head;
            break;
            case 2: 
              source = ((Description)(KeyValueList.dynamicSlotValue(head.dynamicSlots, Logic.SYM_LOGIC_COMPLEMENT_DESCRIPTION, null)));
            break;
            case 3: 
              source = tail;
            break;
            case 4: 
              source = ((Description)(KeyValueList.dynamicSlotValue(tail.dynamicSlots, Logic.SYM_LOGIC_COMPLEMENT_DESCRIPTION, null)));
            break;
            default:
              { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

                stream000.nativeStream.print("`" + i + "' is not a valid case option");
                throw ((StellaException)(StellaException.newStellaException(stream000.theStringReader()).fillInStackTrace()));
              }
          }
          if ((source != null) &&
              Stella_Object.isaP(source, Logic.SGT_LOGIC_NAMED_DESCRIPTION)) {
            if (Logic.originatedPropositions(source).memberP(master)) {
              namedsource = ((NamedDescription)(source));
              break loop000;
            }
          }
        }
      }
      if (namedsource != null) {
        return (Logic.lookupExplanationPhrase(Logic.KWD_DEFINITION, Stella.NIL, null) + " " + Logic.nameObjectMetaclass(namedsource) + " " + namedsource.descriptionName().symbolName);
      }
      else {
        return (Logic.lookupExplanationPhrase(Logic.KWD_LOOKUP_ASSERTIONS, Stella.NIL, null));
      }
    }
  }