sig
  type t
  val compare : t -> t -> int
  val equal : t -> t -> bool
  val hash : t -> int
  val to_string : t -> string
  val pp : Format.formatter -> t -> unit
  val mk : Sl_heap.t -> Sl_pred.t -> t
  val dest : t -> Sl_heap.t * Sl_pred.t
  val vars : t -> Sl_term.Set.t
  val predsym : t -> Sl_predsym.t
  val arity : t -> int
  val formals : t -> Sl_term.t list
  val body : t -> Sl_heap.t
  val freshen : Sl_term.Set.t -> t -> t
  val subst : Sl_subst.t -> t -> t
  val parse : (t, 'a) MParser.t
  val unfold :
    ?gen_tags:bool -> Sl_term.Set.t * Tags.t -> Sl_tpred.t -> t -> Sl_heap.t
  val fold : t -> Sl_heap.t -> (Sl_subst.t * Sl_heap.t) list
  val memory_consuming : t -> bool
  val constructively_valued : t -> bool
end