public static void tightenArgumentBindings(Proposition proposition, Vector iovariables) {
    { 
      { Stella_Object arg = null;
        Vector vector000 = proposition.arguments;
        int index000 = 0;
        int length000 = vector000.length();
        int i = Stella.NULL_INTEGER;
        int iter000 = 0;

        for (;index000 < length000; index000 = index000 + 1, iter000 = iter000 + 1) {
          arg = (vector000.theArray)[index000];
          i = iter000;
          { Surrogate testValue000 = Stella_Object.safePrimaryType(arg);

            if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_PATTERN_VARIABLE)) {
              { PatternVariable arg000 = ((PatternVariable)(arg));

                { Stella_Object value = (((iovariables != null) &&
                      iovariables.memberP(arg000)) ? PatternVariable.innermostVariableOf(arg000) : Logic.innermostOf(arg000));

                  if (!(value == arg000)) {
                    (proposition.arguments.theArray)[i] = value;
                  }
                }
              }
            }
            else if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_PROPOSITION)) {
              { Proposition arg000 = ((Proposition)(arg));

                Proposition.tightenArgumentBindings(arg000, iovariables);
              }
            }
            else {
            }
          }
        }
      }
      if (((Vector)(KeyValueList.dynamicSlotValue(proposition.dynamicSlots, Logic.SYM_LOGIC_IO_VARIABLES, null))) != null) {
        { Vector quantifiedvariables = ((Vector)(KeyValueList.dynamicSlotValue(proposition.dynamicSlots, Logic.SYM_LOGIC_IO_VARIABLES, null)));

          { PatternVariable vbl = null;
            Vector vector001 = quantifiedvariables;
            int index001 = 0;
            int length001 = vector001.length();
            int i = Stella.NULL_INTEGER;
            int iter001 = 0;

            for (;index001 < length001; index001 = index001 + 1, iter001 = iter001 + 1) {
              vbl = ((PatternVariable)((vector001.theArray)[index001]));
              i = iter001;
              if (!(vbl == PatternVariable.innermostVariableOf(vbl))) {
                (quantifiedvariables.theArray)[i] = null;
              }
            }
          }
          KeyValueList.setDynamicSlotValue(proposition.dynamicSlots, Logic.SYM_LOGIC_IO_VARIABLES, Logic.removeNullsInVariablesVector(quantifiedvariables), null);
          Proposition.normalizeProposition(proposition);
        }
      }
    }
  }