public static boolean argumentBoundP(Stella_Object argument) {
    { Surrogate testValue000 = Stella_Object.safePrimaryType(argument);

      if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_PATTERN_VARIABLE)) {
        { PatternVariable argument000 = ((PatternVariable)(argument));

          return (PatternVariable.variableBoundP(argument000));
        }
      }
      else if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_PROPOSITION)) {
        { Proposition argument000 = ((Proposition)(argument));

          if (((Vector)(KeyValueList.dynamicSlotValue(argument000.dynamicSlots, Logic.SYM_LOGIC_IO_VARIABLES, null))) != null) {
            return (Logic.quantifiedArgumentBoundP(argument000, null));
          }
          else {
            { boolean alwaysP000 = true;

              { Stella_Object arg = null;
                Vector vector000 = argument000.arguments;
                int index000 = 0;
                int length000 = vector000.length();

                loop000 : for (;index000 < length000; index000 = index000 + 1) {
                  arg = (vector000.theArray)[index000];
                  if (!Logic.argumentBoundP(arg)) {
                    alwaysP000 = false;
                    break loop000;
                  }
                }
              }
              { boolean value000 = alwaysP000;

                return (value000);
              }
            }
          }
        }
      }
      else if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_DESCRIPTION)) {
        { Description argument000 = ((Description)(argument));

          { boolean testValue001 = false;

            if (((Vector)(KeyValueList.dynamicSlotValue(argument000.dynamicSlots, Logic.SYM_LOGIC_EXTERNAL_VARIABLES, null))) == null) {
              testValue001 = true;
            }
            else {
              { boolean alwaysP001 = true;

                { PatternVariable v = null;
                  Vector vector001 = ((Vector)(KeyValueList.dynamicSlotValue(argument000.dynamicSlots, Logic.SYM_LOGIC_EXTERNAL_VARIABLES, null)));
                  int index001 = 0;
                  int length001 = vector001.length();

                  loop001 : for (;index001 < length001; index001 = index001 + 1) {
                    v = ((PatternVariable)((vector001.theArray)[index001]));
                    if (!Logic.argumentBoundP(v)) {
                      alwaysP001 = false;
                      break loop001;
                    }
                  }
                }
                testValue001 = alwaysP001;
              }
            }
            { boolean value001 = testValue001;

              return (value001);
            }
          }
        }
      }
      else {
        return (true);
      }
    }
  }