public static void propagateSingleValuedConstraints(Proposition goal, List goalsequence) {
    { Vector arguments = goal.arguments;

      { Keyword testValue000 = goal.kind;

        if ((testValue000 == Logic.KWD_FUNCTION) ||
            (testValue000 == Logic.KWD_PREDICATE)) {
          if (Logic.singleValuedTermP(Logic.getDescription(((Surrogate)(goal.operator))))) {
            { boolean testValue001 = false;

              { boolean alwaysP000 = true;

                { Stella_Object arg = null;
                  Iterator iter000 = arguments.butLast();

                  loop000 : while (iter000.nextP()) {
                    arg = iter000.value;
                    if (!Logic.argumentBoundP(arg)) {
                      alwaysP000 = false;
                      break loop000;
                    }
                  }
                }
                testValue001 = alwaysP000;
              }
              if (testValue001) {
                testValue001 = Logic.unboundVariableP(arguments.last());
              }
              if (testValue001) {
                {
                  if (!goalsequence.memberP(goal)) {
                    goalsequence.push(goal);
                  }
                  PatternVariable.simulateBindVariableAndPropagateConstraints(((PatternVariable)(arguments.last())), goalsequence);
                }
              }
              else {
                {
                }
              }
            }
          }
        }
        else if ((testValue000 == Logic.KWD_ISA) ||
            (testValue000 == Logic.KWD_IMPLIES)) {
        }
        else if (testValue000 == Logic.KWD_EQUIVALENT) {
          if (Logic.unboundVariableP((arguments.theArray)[0])) {
            goalsequence.push(goal);
            PatternVariable.simulateBindVariableAndPropagateConstraints(((PatternVariable)((arguments.theArray)[0])), goalsequence);
          }
          else if (Logic.unboundVariableP((arguments.theArray)[1])) {
            goalsequence.push(goal);
            PatternVariable.simulateBindVariableAndPropagateConstraints(((PatternVariable)((arguments.theArray)[1])), goalsequence);
          }
        }
        else if ((testValue000 == Logic.KWD_NOT) ||
            (testValue000 == Logic.KWD_FAIL)) {
        }
        else {
          { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

            stream000.nativeStream.print("`" + testValue000 + "' is not a valid case option");
            throw ((StellaException)(StellaException.newStellaException(stream000.theStringReader()).fillInStackTrace()));
          }
        }
      }
    }
  }