public static Description relationDvalueOf(Relation self) {
    { NamedDescription description = ((NamedDescription)(KeyValueList.dynamicSlotValue(self.dynamicSlots, Logic.SYM_LOGIC_DESCRIPTION, null)));

      if (description != null) {
        return (description);
      }
      if (Surrogate.subtypeOfP(Stella_Object.safePrimaryType(self), Logic.SGT_STELLA_RELATION)) {
        { Relation self000 = ((Relation)(self));

          description = Logic.getDescription(self000);
        }
      }
      else {
      }
      if (description != null) {
        return (description);
      }
      if (!(((Boolean)(Logic.$SUPPRESSNONLOGICOBJECTWARNINGp$.get())).booleanValue())) {
        { Object old$PrintreadablyP$000 = Stella.$PRINTREADABLYp$.get();

          try {
            Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, true);
            Stella.STANDARD_WARNING.nativeStream.println("WARNING: value-of: encountered missing description on class or relation " + self.name());
            Logic.helpSignalPropositionError(Stella.STANDARD_WARNING, Logic.KWD_WARNING);

          } finally {
            Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
          }
        }
      }
      return (null);
    }
  }