sig
  exception TrivialRelation
  module type Domain =
    sig
      val name : string
      type t
      val fmt : Format.formatter -> InvGenDomain.Domain.t -> unit
      val eq : InvGenDomain.Domain.t -> InvGenDomain.Domain.t -> bool
      val cmp : InvGenDomain.Domain.t -> InvGenDomain.Domain.t -> bool
      val mk_eq : Term.t -> Term.t -> Term.t
      val mk_cmp : Term.t -> Term.t -> Term.t
      val eval : TransSys.t -> Model.t -> Term.t -> InvGenDomain.Domain.t
      val mine :
        bool ->
        bool ->
        Analysis.param -> TransSys.t -> (TransSys.t * Term.TermSet.t) list
      val first_rep_of : Term.TermSet.t -> Term.t * Term.TermSet.t
      val is_bot : Term.t -> bool
      val is_top : Term.t -> bool
      val is_os_running : unit -> bool
    end
  module Bool : Domain
  module Int : Domain
  module Real : Domain
end