* @return Proposition
   */
  public static Proposition callDefproposition(Cons arguments) {
    { Cons definition = Cons.cons(Logic.SYM_LOGIC_DEFPROPOSITION, arguments.concatenate(Stella.NIL, Stella.NIL));
      Symbol name = null;
      Cons options = Stella.NIL;
      Stella_Object conception = null;
      Proposition proposition = null;
      TruthValue oldtruthvalue = null;

      { Object old$Termsourcebeingparsed$000 = Logic.$TERMSOURCEBEINGPARSED$.get();

        try {
          Native.setSpecial(Logic.$TERMSOURCEBEINGPARSED$, Native.stringify(definition));
          arguments = Logic.normalizeDefpropositionArguments(arguments);
          name = ((Symbol)(arguments.value));
          Logic.internLogicObjectSurrogate(name);
          conception = Logic.smartUpdateProposition(arguments.rest.value, Logic.KWD_CONCEIVE);
          if (conception == null) {
            return (null);
          }
          else if (Stella_Object.consP(conception)) {
            proposition = Logic.conjoinPropositions(((Cons)(conception)));
          }
          else {
            proposition = ((Proposition)(conception));
          }
          options = arguments.rest.rest;
          Logic.stringifiedSourceSetter(proposition, ((String)(Logic.$TERMSOURCEBEINGPARSED$.get())));
          KeyValueList.setDynamicSlotValue(proposition.dynamicSlots, Logic.SYM_STELLA_BADp, Stella.TRUE_WRAPPER, null);
          Logic.bindLogicObjectToSurrogate(name, proposition);
          proposition.processDefinitionOptions(options);
          if (proposition.kind == Logic.KWD_FORALL) {
            { Proposition satellite = null;
              Cons iter000 = proposition.satellitePropositions().theConsList;

              for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
                satellite = ((Proposition)(iter000.value));
                Proposition.destroyProposition(satellite);
              }
            }
            KeyValueList.setDynamicSlotValue(proposition.dynamicSlots, Logic.SYM_LOGIC_SATELLITE_PROPOSITIONS, null, null);
          }
          oldtruthvalue = ((TruthValue)(Stella_Object.accessInContext(proposition.truthValue, proposition.homeContext, false)));
          if (Proposition.lookupAnnotation(proposition, Logic.KWD_CONFIDENCE_LEVEL) == Logic.KWD_DEFAULT) {
            Proposition.removeAnnotation(proposition, Logic.KWD_CONFIDENCE_LEVEL);
            Proposition.updatePropositionTruthValue(proposition, Logic.KWD_PRESUME_TRUE);
          }
          else {
            Proposition.updatePropositionTruthValue(proposition, Logic.KWD_ASSERT_TRUE);
          }
          if (oldtruthvalue == ((TruthValue)(Stella_Object.accessInContext(proposition.truthValue, proposition.homeContext, false)))) {
            Proposition.runGoesTrueDemons(proposition);
          }
          KeyValueList.setDynamicSlotValue(proposition.dynamicSlots, Logic.SYM_STELLA_BADp, null, null);
          Logic.registerUnfinalizedObject(proposition);
          return (proposition);

        } finally {
          Logic.$TERMSOURCEBEINGPARSED$.set(old$Termsourcebeingparsed$000);
        }
      }
    }
  }