sig   type 'a dom   module Dom :     sig       type 'a t = 'Rel.dom       val v :         ?name:string ->         ?pp:(Format.formatter -> '-> unit) ->         ?equal:('-> '-> bool) -> unit -> 'Rel.dom       module type V =         sig           type t           val equal : Rel.Dom.V.t -> Rel.Dom.V.t -> bool           val pp : Format.formatter -> Rel.Dom.V.t -> unit         end       val of_type : (module Rel.Dom.V with type t = 'a) -> 'Rel.Dom.t       val with_dom :         ?name:string ->         ?pp:(Format.formatter -> '-> unit) -> 'Rel.dom -> 'Rel.dom       val name : 'Rel.dom -> string       val pp_value : 'Rel.dom -> Format.formatter -> '-> unit       val equal_value : 'Rel.dom -> '-> '-> bool       val equal : 'Rel.dom -> 'Rel.dom -> bool       val pp : Format.formatter -> 'Rel.dom -> unit       val unit : unit Rel.dom       val bool : bool Rel.dom       val int : int Rel.dom       val float : float Rel.dom       val string : string Rel.dom       val pair : 'Rel.dom -> 'Rel.dom -> ('a * 'b) Rel.dom       val list : 'Rel.dom -> 'a list Rel.dom     end   type 'a term   val pp_term : Format.formatter -> 'Rel.term -> unit   val const : 'Rel.dom -> '-> 'Rel.term   val unit : unit Rel.term   val bool : bool -> bool Rel.term   val int : int -> int Rel.term   val float : float -> float Rel.term   val string : string -> string Rel.term   type 'a ret   val pure : '-> 'Rel.ret   val app : 'Rel.dom -> 'Rel.term -> ('-> 'b) Rel.ret -> 'Rel.ret   val ret : 'Rel.dom -> 'Rel.ret -> 'Rel.term   val pair :     'Rel.dom ->     'Rel.dom ->     ('a * 'b) Rel.dom -> 'Rel.term -> 'Rel.term -> ('a * 'b) Rel.term   type goal   val fail : Rel.goal   val succeed : Rel.goal   val ( = ) : 'Rel.term -> 'Rel.term -> Rel.goal   val ( || ) : Rel.goal -> Rel.goal -> Rel.goal   val ( && ) : Rel.goal -> Rel.goal -> Rel.goal   val delay : Rel.goal Lazy.t -> Rel.goal   val fresh : ('Rel.term -> Rel.goal) -> Rel.goal   module Fresh :     sig       val v1 : ('Rel.term -> Rel.goal) -> Rel.goal       val v2 : ('Rel.term -> 'Rel.term -> Rel.goal) -> Rel.goal       val v3 :         ('Rel.term -> 'Rel.term -> 'Rel.term -> Rel.goal) -> Rel.goal       val v4 :         ('Rel.term -> 'Rel.term -> 'Rel.term -> 'Rel.term -> Rel.goal) ->         Rel.goal       val v5 :         ('Rel.term ->          'Rel.term -> 'Rel.term -> 'Rel.term -> 'Rel.term -> Rel.goal) ->         Rel.goal       val v6 :         ('Rel.term ->          'Rel.term ->          'Rel.term -> 'Rel.term -> 'Rel.term -> 'Rel.term -> Rel.goal) ->         Rel.goal     end   type 'a seq   module Seq :     sig       type 'a t = 'Rel.seq       val empty : 'Rel.seq       val is_empty : 'Rel.seq -> bool       val head : 'Rel.seq -> 'a option       val get_head : 'Rel.seq -> 'a       val tail : 'Rel.seq -> 'Rel.seq       val to_list : ?limit:int -> 'Rel.seq -> 'a list     end   type 'a value   module Value :     sig       type 'a t = 'Rel.value       val name : 'Rel.value -> string       val find : 'Rel.value -> 'a option       val get : 'Rel.value -> 'a       val term : 'Rel.value -> 'Rel.term       val pp : Format.formatter -> 'Rel.value -> unit       val get1 : 'Rel.value -> 'a       val get2 : 'Rel.value -> 'Rel.value -> 'a * 'b       val get3 : 'Rel.value -> 'Rel.value -> 'Rel.value -> 'a * 'b * 'c       val get4 :         'Rel.value ->         'Rel.value -> 'Rel.value -> 'Rel.value -> 'a * 'b * 'c * 'd       val get5 :         'Rel.value ->         'Rel.value ->         'Rel.value ->         'Rel.value -> 'Rel.value -> 'a * 'b * 'c * 'd * 'e       val get6 :         'Rel.value ->         'Rel.value ->         'Rel.value ->         'Rel.value ->         'Rel.value -> 'Rel.value -> 'a * 'b * 'c * 'd * 'e * 'f     end   type ('q, 'r) reifier   val reifier : '-> '-> ('q, 'r) Rel.reifier   val query :     ?name:string ->     ('Rel.term -> 'q, 'Rel.value -> 'r) Rel.reifier ->     ('q, 'r) Rel.reifier   module Query :     sig       val v1 :         ?n0:string ->         ('Rel.term -> 'q, 'Rel.value -> 'r) Rel.reifier ->         ('q, 'r) Rel.reifier       val v2 :         ?n0:string ->         ?n1:string ->         ('Rel.term -> 'Rel.term -> 'q,          'Rel.value -> 'Rel.value -> 'r)         Rel.reifier -> ('q, 'r) Rel.reifier       val v3 :         ?n0:string ->         ?n1:string ->         ?n2:string ->         ('Rel.term -> 'Rel.term -> 'Rel.term -> 'q,          'Rel.value -> 'Rel.value -> 'Rel.value -> 'r)         Rel.reifier -> ('q, 'r) Rel.reifier       val v4 :         ?n0:string ->         ?n1:string ->         ?n2:string ->         ?n3:string ->         ('Rel.term -> 'Rel.term -> 'Rel.term -> 'Rel.term -> 'q,          'Rel.value -> 'Rel.value -> 'Rel.value -> 'Rel.value -> 'r)         Rel.reifier -> ('q, 'r) Rel.reifier       val v5 :         ?n0:string ->         ?n1:string ->         ?n2:string ->         ?n3:string ->         ?n4:string ->         ('Rel.term ->          'Rel.term -> 'Rel.term -> 'Rel.term -> 'Rel.term -> 'q,          'Rel.value ->          'Rel.value -> 'Rel.value -> 'Rel.value -> 'Rel.value -> 'r)         Rel.reifier -> ('q, 'r) Rel.reifier       val v6 :         ?n0:string ->         ?n1:string ->         ?n2:string ->         ?n3:string ->         ?n4:string ->         ?n5:string ->         ('Rel.term ->          'Rel.term ->          'Rel.term -> 'Rel.term -> 'Rel.term -> 'Rel.term -> 'q,          'Rel.value ->          'Rel.value ->          'Rel.value -> 'Rel.value -> 'Rel.value -> 'Rel.value -> 'r)         Rel.reifier -> ('q, 'r) Rel.reifier     end   val run : (Rel.goal, 'r) Rel.reifier -> 'Rel.Seq.t   val success : Rel.goal -> bool end