public static LogicObject evaluatePredicateAndFirstArgument(Cons tree, Object [] MV_returnarray) {
    { Stella_Object predicate = tree.value;
      Stella_Object firstargument = tree.rest.value;

      if (Surrogate.subtypeOfP(Stella_Object.safePrimaryType(predicate), Logic.SGT_STELLA_GENERALIZED_SYMBOL)) {
        { GeneralizedSymbol predicate000 = ((GeneralizedSymbol)(predicate));

          if ((predicate000 == Logic.SYM_STELLA_EXISTS) ||
              (predicate000 == Logic.SYM_STELLA_FORALL)) {
            firstargument = null;
            predicate000 = null;
          }
          else if ((predicate000 == Logic.SYM_STELLA_AND) ||
              ((predicate000 == Logic.SYM_STELLA_OR) ||
               (predicate000 == Logic.SYM_STELLA_NOT))) {
            firstargument = null;
            predicate000 = null;
          }
          else {
          }
        }
      }
      else {
        predicate = null;
      }
      if (predicate != null) {
        if (firstargument != null) {
          firstargument = Logic.evaluateFirstArgument(tree.rest.value, ((Symbol)(predicate)));
        }
        predicate = Logic.evaluatePredicate(((GeneralizedSymbol)(predicate)), firstargument);
      }
      { LogicObject _return_temp = ((LogicObject)(predicate));

        MV_returnarray[0] = firstargument;
        return (_return_temp);
      }
    }
  }