public static Proposition findOrCreateFunctionProposition(GeneralizedSymbol predicate, Cons inputarguments) {
    { Proposition proposition = Logic.beginCreatingFunctionProposition(predicate, inputarguments);
      Proposition duplicate = ((!Logic.descriptionModeP()) ? Proposition.findDuplicateFunctionProposition(proposition) : ((Proposition)(null)));

      if (duplicate != null) {
        return (duplicate);
      }
      proposition = Proposition.finishCreatingFunctionProposition(proposition);
      { boolean testValue000 = false;

        if (!((BooleanWrapper)(KeyValueList.dynamicSlotValue(proposition.dynamicSlots, Logic.SYM_LOGIC_DESCRIPTIVEp, Stella.FALSE_WRAPPER))).wrapperValue) {
          testValue000 = true;
        }
        else {
          { boolean alwaysP000 = true;

            { int i = Stella.NULL_INTEGER;
              int iter000 = 0;
              int upperBound000 = proposition.arguments.length() - 2;

              loop000 : for (;iter000 <= upperBound000; iter000 = iter000 + 1) {
                i = iter000;
                if (!(!Logic.variableP((proposition.arguments.theArray)[i]))) {
                  alwaysP000 = false;
                  break loop000;
                }
              }
            }
            testValue000 = alwaysP000;
          }
        }
        if (testValue000) {
          Proposition.runGoesTrueDemons(proposition);
        }
      }
      return (proposition);
    }
  }