public static ForwardJustification createForwardJustification(Cons antecedents, Proposition forwardrule, Vector arguments, Proposition consequentproposition, Justification bcJustification) {
    { ForwardJustification self000 = ForwardJustification.newForwardJustification();

      self000.inferenceRule = Logic.KWD_MODUS_PONENS;
      { ForwardJustification fj = self000;
        Vector ruleVariables = Proposition.getRuleIoVariables(forwardrule);
        KeyValueMap substitution = null;
        Cons antecedentJustifications = Stella.NIL;

        if (bcJustification != null) {
          {
            substitution = bcJustification.substitution;
            antecedentJustifications = Cons.cons(bcJustification, antecedentJustifications);
          }
        }
        else {
          {
            substitution = KeyValueMap.newKeyValueMap();
            { Stella_Object arg = null;
              Vector vector000 = arguments;
              int index000 = 0;
              int length000 = vector000.length();
              PatternVariable var = null;
              Vector vector001 = ruleVariables;
              int index001 = 0;
              int length001 = vector001.length();

              for (;(index000 < length000) &&
                        (index001 < length001); index000 = index000 + 1, index001 = index001 + 1) {
                arg = (vector000.theArray)[index000];
                var = ((PatternVariable)((vector001.theArray)[index001]));
                substitution.insertAt(var, arg);
              }
            }
          }
        }
        { Proposition aprop = null;
          Cons iter000 = antecedents;

          for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
            aprop = ((Proposition)(iter000.value));
            antecedentJustifications = Cons.cons(Proposition.getForwardAntecedentJustification(aprop), antecedentJustifications);
          }
        }
        antecedentJustifications = Cons.cons(Proposition.getForwardAntecedentJustification(forwardrule), antecedentJustifications);
        fj.substitution = ((KeyValueMap)(substitution));
        fj.proposition = consequentproposition;
        fj.truthValue = ((TruthValue)(Stella_Object.accessInContext(consequentproposition.truthValue, consequentproposition.homeContext, false)));
        fj.antecedents = antecedentJustifications;
        return (fj);
      }
    }
  }