public static void reactToSkolemValueUpdate(Skolem skolem, Stella_Object oldvalue, Stella_Object newvalue, boolean toplevelupdateP) {
    { Proposition proposition = skolem.definingProposition;

      if (toplevelupdateP &&
          Proposition.nativeSlotPropositionP(proposition)) {
        { Relation slot = Logic.getDescription(((Surrogate)(proposition.operator))).nativeRelation();
          Stella_Object nativefirstargvalue = Logic.valueOf((proposition.arguments.theArray)[0]);

          if (newvalue != null) {
            Proposition.assignNativeSlotValue(proposition, ((Thing)(nativefirstargvalue)), ((StorageSlot)(slot)), newvalue);
          }
          else {
            Logic.dropNativeSlotValue(((Thing)(nativefirstargvalue)), ((StorageSlot)(slot)), oldvalue);
          }
        }
      }
      if (!Stella_Object.eqlP(oldvalue, newvalue)) {
        Keyword.bumpMemoizationTimestamp(Logic.KWD_KB_UPDATE);
        if (((newvalue != null) &&
            Stella_Object.isaP(newvalue, Logic.SGT_LOGIC_DESCRIPTION)) ||
            Proposition.metaPropositionP(proposition)) {
          Keyword.bumpMemoizationTimestamp(Logic.KWD_META_KB_UPDATE);
        }
        if (oldvalue != null) {
          Proposition.updateLinksAndTimestamps(proposition, Logic.KWD_RETRACT_TRUE);
        }
        if (newvalue != null) {
          Proposition.updateLinksAndTimestamps(proposition, Logic.KWD_ASSERT_TRUE);
        }
      }
    }
  }