public static void bindToEquivalentValue(LogicObject from, Description to) {
    if (from == to) {
      return;
    }
    if (Surrogate.subtypeOfP(Stella_Object.safePrimaryType(from), Logic.SGT_LOGIC_SKOLEM)) {
      { Skolem from000 = ((Skolem)(from));

        { Skolem object000 = from000;
          Stella_Object value000 = to;
          Stella_Object oldValue000 = object000.variableValue;
          Stella_Object newValue000 = Stella_Object.updateInContext(oldValue000, value000, object000.homeContext, false);

          if (!((oldValue000 != null) &&
              (oldValue000.primaryType() == Logic.SGT_STELLA_CS_VALUE))) {
            object000.variableValue = newValue000;
          }
        }
      }
    }
    else {
      if (((Description)(Stella_Object.accessInContext(KeyValueList.dynamicSlotValue(from.dynamicSlots, Logic.SYM_LOGIC_EQUIVALENT_VALUE, null), from.homeContext, false))) == to) {
        return;
      }
      { LogicObject object001 = from;
        Description value001 = to;
        Stella_Object oldValue002 = KeyValueList.dynamicSlotValue(object001.dynamicSlots, Logic.SYM_LOGIC_EQUIVALENT_VALUE, null);
        Stella_Object newValue001 = Stella_Object.updateInContext(oldValue002, value001, object001.homeContext, false);

        if (!((oldValue002 != null) &&
            (oldValue002.primaryType() == Logic.SGT_STELLA_CS_VALUE))) {
          KeyValueList.setDynamicSlotValue(object001.dynamicSlots, Logic.SYM_LOGIC_EQUIVALENT_VALUE, newValue001, null);
        }
      }
    }
    { Description object002 = to;
      Cons value002 = Cons.cons(from, from.variableValueInverse());
      Stella_Object oldValue003 = object002.variableValueInverse;
      Stella_Object newValue002 = Stella_Object.updateInContext(oldValue003, value002, object002.homeContext, false);

      if (!((oldValue003 != null) &&
          (oldValue003.primaryType() == Logic.SGT_STELLA_CS_VALUE))) {
        object002.variableValueInverse = newValue002;
      }
    }
  }