code: def to_dict(self, short_pred=True, properties=True):
          
          def _lnk(obj): return {'from': obj.cfrom, 'to': obj.cto}
          def _ep(ep, short_pred=True):
              p = ep.pred.short_form() if short_pred else ep.pred.string
              d = dict(label=ep.label, predicate=p, arguments=ep.args)
              if ep.lnk is not None: d['lnk'] = _lnk(ep)
              return d
          def _hcons(hc): return {'relation':hc[1], 'high':hc[0], 'low':hc[2]}
          def _icons(ic): return {'relation':ic[1], 'left':ic[0], 'right':ic[2]}
          def _var(v):
              d = {'type': var_sort(v)}
              if properties and self.properties(v):
                  d['properties'] = self.properties(v)
              return d
  
          d = dict(
              relations=[_ep(ep, short_pred=short_pred) for ep in self.eps()],
              constraints=([_hcons(hc) for hc in self.hcons()] +
                           [_icons(ic) for ic in self.icons()]),
              variables={v: _var(v) for v in self.variables()}
          )
          if self.top is not None: d['top'] = self.top
          if self.index is not None: d['index'] = self.index
          # if self.xarg is not None: d['xarg'] = self.xarg
          # if self.lnk is not None: d['lnk'] = self.lnk
          # if self.surface is not None: d['surface'] = self.surface
          # if self.identifier is not None: d['identifier'] = self.identifier
          return d
docs: Encode the Mrs as a dictionary suitable for JSON serialization.