public static Stella_Object inheritPropositionArgument(Stella_Object argument, Proposition parent, KeyValueMap mapping) {
    { Surrogate testValue000 = Stella_Object.safePrimaryType(argument);

      if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_PROPOSITION)) {
        { Proposition argument000 = ((Proposition)(argument));

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

          if (Description.namedDescriptionP(argument000)) {
            return (argument000);
          }
          else {
            return (Description.copyDescription(argument000, mapping, true));
          }
        }
      }
      else if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_PATTERN_VARIABLE)) {
        { PatternVariable argument000 = ((PatternVariable)(argument));

          return (Logic.mappedValueOf(argument000, mapping, true));
        }
      }
      else if (Surrogate.subtypeOfSurrogateP(testValue000)) {
        { Surrogate argument000 = ((Surrogate)(argument));

          if (Logic.descriptionModeP() ||
              ((parent.kind == Logic.KWD_ISA) &&
               (((Surrogate)(parent.operator)) == argument000))) {
            return (argument000);
          }
          else {
            { Stella_Object value = argument000.surrogateValue;

              if (Logic.relationP(value)) {
                return (Logic.surrogateToDescription(argument000));
              }
              else {
                return (value);
              }
            }
          }
        }
      }
      else {
        return (argument);
      }
    }
  }