public static void deriveDeferredSatelliteRules(Description self) {
    if (Logic.$LAZY_SATELLITE_RULESp$) {
      { Object old$DeriveDeferredSatelliteRulesInvocations$000 = Logic.$DERIVE_DEFERRED_SATELLITE_RULES_INVOCATIONS$.get();

        try {
          Native.setSpecial(Logic.$DERIVE_DEFERRED_SATELLITE_RULES_INVOCATIONS$, ((List)(((((List)(Logic.$DERIVE_DEFERRED_SATELLITE_RULES_INVOCATIONS$.get())) == null) ? List.newList() : ((List)(Logic.$DERIVE_DEFERRED_SATELLITE_RULES_INVOCATIONS$.get()))))));
          if (((List)(Logic.$DERIVE_DEFERRED_SATELLITE_RULES_INVOCATIONS$.get())).membP(self)) {
            return;
          }
          ((List)(Logic.$DERIVE_DEFERRED_SATELLITE_RULES_INVOCATIONS$.get())).insert(self);
          if ((((SequenceIndex)(KeyValueList.dynamicSlotValue(self.dynamicSlots, Logic.SYM_LOGIC_RULES_WITH_DEFERRED_SATELLITES, null))) == null) &&
              (((Description)(KeyValueList.dynamicSlotValue(self.dynamicSlots, Logic.SYM_LOGIC_COMPLEMENT_DESCRIPTION, null))) == null)) {
            return;
          }
          { SequenceIndex queuedrules = ((SequenceIndex)(KeyValueList.dynamicSlotValue(self.dynamicSlots, Logic.SYM_LOGIC_RULES_WITH_DEFERRED_SATELLITES, null)));
            Description complement = ((Description)(KeyValueList.dynamicSlotValue(self.dynamicSlots, Logic.SYM_LOGIC_COMPLEMENT_DESCRIPTION, null)));

            if (queuedrules != null) {
              { Proposition forallprop = null;
                Iterator iter000 = queuedrules.allocateIterator();

                while (iter000.nextP()) {
                  forallprop = ((Proposition)(iter000.value));
                  Proposition.deriveSatelliteRulesForGoalP(forallprop, self, ((complement == null) ? Logic.KWD_POSITIVE : Logic.KWD_POSITIVE_AND_CONTRAPOSITIVE), false);
                }
              }
              if (complement != null) {
                KeyValueList.setDynamicSlotValue(self.dynamicSlots, Logic.SYM_LOGIC_DEFERRED_CONTRAPOSITIVESp, null, null);
              }
              KeyValueList.setDynamicSlotValue(self.dynamicSlots, Logic.SYM_LOGIC_RULES_WITH_DEFERRED_SATELLITES, null, null);
            }
            if ((complement != null) &&
                (((SequenceIndex)(KeyValueList.dynamicSlotValue(complement.dynamicSlots, Logic.SYM_LOGIC_RULES_WITH_DEFERRED_SATELLITES, null))) != null)) {
              Description.deriveDeferredSatelliteRules(complement);
            }
          }

        } finally {
          Logic.$DERIVE_DEFERRED_SATELLITE_RULES_INVOCATIONS$.set(old$DeriveDeferredSatelliteRulesInvocations$000);
        }
      }
    }
  }