public static Stella_Object getArgumentBinding(Stella_Object arg) {
    { Stella_Object bind = Logic.argumentBoundTo(arg);

      if (bind == null) {
        return (Symbol.internSymbol(Skolem.getSkolemPrintName(((Skolem)(arg)))));
      }
      else {
        { Surrogate testValue000 = Stella_Object.safePrimaryType(bind);

          if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_DESCRIPTION)) {
            { Description bind000 = ((Description)(bind));

              return (bind000.nativeRelation());
            }
          }
          else if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_SKOLEM)) {
            { Skolem bind000 = ((Skolem)(bind));

              if (bind000.definingProposition != null) {
                return (Proposition.propositionToCons(bind000.definingProposition));
              }
              else if (Stella.stringEqlP(Skolem.getSkolemPrintName(bind000), "ANONYMOUS")) {
                return (Symbol.internSymbol(Skolem.getSkolemPrintName(((Skolem)(arg)))));
              }
              else {
                return (bind000);
              }
            }
          }
          else if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_LOGIC_OBJECT)) {
            { LogicObject bind000 = ((LogicObject)(bind));

              return (Symbol.internSymbol(bind000.surrogateValueInverse.symbolName));
            }
          }
          else {
            return (bind);
          }
        }
      }
    }
  }