sidekick/src/smt/Mini_cc_intf.ml
2019-02-09 16:16:44 -06:00

47 lines
833 B
OCaml

type ('f, 't, 'ts) view =
| Bool of bool
| App of 'f * 'ts
| If of 't * 't * 't
(* TODO: also HO app, Eq, Distinct cases?
-> then API that just adds boolean terms and does the right thing in case of
Eq/Distinct *)
type res =
| Sat
| Unsat
module type ARG = sig
module Fun : sig
type t
val equal : t -> t -> bool
val hash : t -> int
val pp : t Fmt.printer
end
module Term : sig
type t
val equal : t -> t -> bool
val hash : t -> int
val pp : t Fmt.printer
(** View the term through the lens of the congruence closure *)
val view : t -> (Fun.t, t, t Sequence.t) view
end
end
module type S = sig
type term
type fun_
type t
val create : unit -> t
val merge : t -> term -> term -> unit
val distinct : t -> term list -> unit
val check : t -> res
end