public static void redefineLogicObject(Symbol name, Stella_Object oldobject, Stella_Object newobject) {
    { List originatedprops = Logic.originatedPropositions(oldobject);
      List exceptprops = originatedprops.copy();

      { Proposition prop = null;
        Cons iter000 = originatedprops.theConsList;

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
          prop = ((Proposition)(iter000.value));
          { Proposition satellite = null;
            Cons iter001 = prop.satellitePropositions().theConsList;

            for (;!(iter001 == Stella.NIL); iter001 = iter001.rest) {
              satellite = ((Proposition)(iter001.value));
              exceptprops.insertNew(satellite);
            }
          }
        }
      }
      if (((Boolean)(Stella.$WARNIFREDEFINEp$.get())).booleanValue() &&
          (!Stella.stringEqlP(Logic.stringifiedSource(oldobject), Logic.stringifiedSource(newobject)))) {
        Logic.plLog(Logic.KWD_LOW, Cons.cons(StringWrapper.wrapString("Redefining the "), Cons.cons(StringWrapper.wrapString(Logic.nameObjectMetaclass(oldobject)), Cons.cons(StringWrapper.wrapString(" named "), Cons.cons(name, Stella.NIL)))));
      }
      Logic.transferSynonyms(oldobject, newobject);
      Logic.transferPropositionsExceptFor(oldobject, newobject, exceptprops);
      if (Stella_Object.isaP(oldobject, Logic.SGT_LOGIC_NAMED_DESCRIPTION)) {
        NamedDescription.transferDescriptionExtension(((NamedDescription)(oldobject)), ((NamedDescription)(newobject)));
      }
      { Proposition prop = null;
        Cons iter002 = originatedprops.theConsList;

        for (;!(iter002 == Stella.NIL); iter002 = iter002.rest) {
          prop = ((Proposition)(iter002.value));
          Proposition.destroyProposition(prop);
        }
      }
      if (!(Stella_Object.eqlP(oldobject, newobject))) {
        Logic.destroyObject(oldobject);
      }
    }
  }