public static Stella_Object evaluatePropositionTerm(Stella_Object tree) {
    { Surrogate testValue000 = Stella_Object.safePrimaryType(tree);

      if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_PROPOSITION)) {
        { Proposition tree000 = ((Proposition)(tree));

          return (tree000);
        }
      }
      else if (testValue000 == Logic.SGT_STELLA_CONS) {
        { Cons tree000 = ((Cons)(tree));

          { LogicObject predicate = null;
            Stella_Object firstargument = null;

            { Object [] caller_MV_returnarray = new Object[1];

              predicate = Logic.evaluatePredicateAndFirstArgument(tree000, caller_MV_returnarray);
              firstargument = ((Stella_Object)(caller_MV_returnarray[0]));
            }
            if (firstargument != null) {
              tree000.secondSetter(firstargument);
            }
            if (Logic.functionP(predicate) &&
                (((NamedDescription)(predicate)).arity() == tree000.length())) {
              return (Logic.evaluateFunctionTerm(tree000));
            }
            else {
              return (Logic.buildProposition(tree000));
            }
          }
        }
      }
      else {
        return (Logic.buildProposition(tree));
      }
    }
  }