sig
type sort = Glob | Constr | Var
type const =
ConstInt of Num.num
| ConstReal of Num.num
| ConstName of Hstring.t
module MConst :
sig
type key = const
type +'a t
val empty : 'a t
val is_empty : 'a t -> bool
val mem : key -> 'a t -> bool
val add : key -> 'a -> 'a t -> 'a t
val update : key -> ('a option -> 'a option) -> 'a t -> 'a t
val singleton : key -> 'a -> 'a t
val remove : key -> 'a t -> 'a t
val merge :
(key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t
val union : (key -> 'a -> 'a -> 'a option) -> 'a t -> 'a t -> 'a t
val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int
val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val for_all : (key -> 'a -> bool) -> 'a t -> bool
val exists : (key -> 'a -> bool) -> 'a t -> bool
val filter : (key -> 'a -> bool) -> 'a t -> 'a t
val partition : (key -> 'a -> bool) -> 'a t -> 'a t * 'a t
val cardinal : 'a t -> int
val bindings : 'a t -> (key * 'a) list
val min_binding : 'a t -> key * 'a
val min_binding_opt : 'a t -> (key * 'a) option
val max_binding : 'a t -> key * 'a
val max_binding_opt : 'a t -> (key * 'a) option
val choose_opt : 'a t -> (key * 'a) option
val split : key -> 'a t -> 'a t * 'a option * 'a t
val find : key -> 'a t -> 'a
val find_opt : key -> 'a t -> 'a option
val find_first : (key -> bool) -> 'a t -> key * 'a
val find_first_opt : (key -> bool) -> 'a t -> (key * 'a) option
val find_last : (key -> bool) -> 'a t -> key * 'a
val find_last_opt : (key -> bool) -> 'a t -> (key * 'a) option
val map : ('a -> 'b) -> 'a t -> 'b t
val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t
val choose : int t -> key * int
val is_num : int t -> Num.num option
end
val compare_constants : int Types.MConst.t -> int Types.MConst.t -> int
val add_constants :
int Types.MConst.t -> int Types.MConst.t -> int Types.MConst.t
val const_sign : int Types.MConst.t -> int option
val const_nul : int Types.MConst.t -> bool
val mult_const : int -> int Types.MConst.t -> int Types.MConst.t
module Var :
sig
type t = V of Hstring.t * Types.sort | T of Hstring.t * Variable.t list
val compare : Types.Var.t -> Types.Var.t -> int
end
module VMap :
sig
type key = Var.t
type +'a t
val empty : 'a t
val is_empty : 'a t -> bool
val mem : key -> 'a t -> bool
val add : key -> 'a -> 'a t -> 'a t
val update : key -> ('a option -> 'a option) -> 'a t -> 'a t
val singleton : key -> 'a -> 'a t
val remove : key -> 'a t -> 'a t
val merge :
(key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t
val union : (key -> 'a -> 'a -> 'a option) -> 'a t -> 'a t -> 'a t
val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int
val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val for_all : (key -> 'a -> bool) -> 'a t -> bool
val exists : (key -> 'a -> bool) -> 'a t -> bool
val filter : (key -> 'a -> bool) -> 'a t -> 'a t
val partition : (key -> 'a -> bool) -> 'a t -> 'a t * 'a t
val cardinal : 'a t -> int
val bindings : 'a t -> (key * 'a) list
val min_binding : 'a t -> key * 'a
val min_binding_opt : 'a t -> (key * 'a) option
val max_binding : 'a t -> key * 'a
val max_binding_opt : 'a t -> (key * 'a) option
val choose : 'a t -> key * 'a
val choose_opt : 'a t -> (key * 'a) option
val split : key -> 'a t -> 'a t * 'a option * 'a t
val find : key -> 'a t -> 'a
val find_opt : key -> 'a t -> 'a option
val find_first : (key -> bool) -> 'a t -> key * 'a
val find_first_opt : (key -> bool) -> 'a t -> (key * 'a) option
val find_last : (key -> bool) -> 'a t -> key * 'a
val find_last_opt : (key -> bool) -> 'a t -> (key * 'a) option
val map : ('a -> 'b) -> 'a t -> 'b t
val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t
end
type cst = CInt of Num.num | CReal of Num.num | CName of Hstring.t
type poly = Types.cst Types.VMap.t * Types.cst
type term =
Const of int Types.MConst.t
| Elem of Hstring.t * Types.sort
| Access of Hstring.t * Variable.t list
| Arith of Types.term * int Types.MConst.t
module Term :
sig
type t = Types.term
val compare : Types.Term.t -> Types.Term.t -> int
val equal : Types.Term.t -> Types.Term.t -> bool
val hash : Types.Term.t -> int
val subst : Variable.subst -> Types.Term.t -> Types.Term.t
val htrue : Hstring.t
val hfalse : Hstring.t
val variables : Types.Term.t -> Variable.Set.t
val variables_proc : Types.Term.t -> Variable.Set.t
val type_of : Types.Term.t -> Smt.Type.t
val print : Format.formatter -> Types.Term.t -> unit
module Set :
sig
type elt = t
type t
val empty : t
val is_empty : t -> bool
val mem : elt -> t -> bool
val add : elt -> t -> t
val singleton : elt -> t
val remove : elt -> t -> t
val union : t -> t -> t
val inter : t -> t -> t
val diff : t -> t -> t
val compare : t -> t -> int
val equal : t -> t -> bool
val subset : t -> t -> bool
val iter : (elt -> unit) -> t -> unit
val map : (elt -> elt) -> t -> t
val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (elt -> bool) -> t -> bool
val exists : (elt -> bool) -> t -> bool
val filter : (elt -> bool) -> t -> t
val partition : (elt -> bool) -> t -> t * t
val cardinal : t -> int
val elements : t -> elt list
val min_elt : t -> elt
val min_elt_opt : t -> elt option
val max_elt : t -> elt
val max_elt_opt : t -> elt option
val choose : t -> elt
val choose_opt : t -> elt option
val split : elt -> t -> t * bool * t
val find : elt -> t -> elt
val find_opt : elt -> t -> elt option
val find_first : (elt -> bool) -> t -> elt
val find_first_opt : (elt -> bool) -> t -> elt option
val find_last : (elt -> bool) -> t -> elt
val find_last_opt : (elt -> bool) -> t -> elt option
val of_list : elt list -> t
end
end
type op_comp = Eq | Lt | Le | Neq
module rec Atom :
sig
type t =
True
| False
| Comp of Types.Term.t * Types.op_comp * Types.Term.t
| Ite of Types.SAtom.t * Types.Atom.t * Types.Atom.t
val compare : Types.Atom.t -> Types.Atom.t -> int
val trivial_is_implied : Types.Atom.t -> Types.Atom.t -> int
val neg : Types.Atom.t -> Types.Atom.t
val hash : Types.Atom.t -> int
val equal : Types.Atom.t -> Types.Atom.t -> bool
val subst : Variable.subst -> Types.Atom.t -> Types.Atom.t
val has_var : Variable.t -> Types.Atom.t -> bool
val has_vars : Variable.t list -> Types.Atom.t -> bool
val variables : Types.Atom.t -> Variable.Set.t
val variables_proc : Types.Atom.t -> Variable.Set.t
val print : Format.formatter -> Types.Atom.t -> unit
end
and SAtom :
sig
type elt = Atom.t
type t
val empty : t
val is_empty : t -> bool
val mem : elt -> t -> bool
val add : elt -> t -> t
val singleton : elt -> t
val remove : elt -> t -> t
val union : t -> t -> t
val inter : t -> t -> t
val diff : t -> t -> t
val compare : t -> t -> int
val subset : t -> t -> bool
val iter : (elt -> unit) -> t -> unit
val map : (elt -> elt) -> t -> t
val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (elt -> bool) -> t -> bool
val exists : (elt -> bool) -> t -> bool
val filter : (elt -> bool) -> t -> t
val partition : (elt -> bool) -> t -> t * t
val cardinal : t -> int
val elements : t -> elt list
val min_elt : t -> elt
val min_elt_opt : t -> elt option
val max_elt : t -> elt
val max_elt_opt : t -> elt option
val choose : t -> elt
val choose_opt : t -> elt option
val split : elt -> t -> t * bool * t
val find : elt -> t -> elt
val find_opt : elt -> t -> elt option
val find_first : (elt -> bool) -> t -> elt
val find_first_opt : (elt -> bool) -> t -> elt option
val find_last : (elt -> bool) -> t -> elt
val find_last_opt : (elt -> bool) -> t -> elt option
val of_list : elt list -> t
val equal : t -> t -> bool
val hash : t -> int
val subst : Variable.subst -> t -> t
val variables : t -> Variable.Set.t
val variables_proc : t -> Variable.Set.t
val print : Format.formatter -> t -> unit
val print_inline : Format.formatter -> t -> unit
end
module ArrayAtom :
sig
type t = Types.Atom.t array
val equal : Types.ArrayAtom.t -> Types.ArrayAtom.t -> bool
val hash : Types.ArrayAtom.t -> int
val subset : Types.ArrayAtom.t -> Types.ArrayAtom.t -> bool
val trivial_is_implied : Types.ArrayAtom.t -> Types.ArrayAtom.t -> bool
val of_satom : Types.SAtom.t -> Types.ArrayAtom.t
val to_satom : Types.ArrayAtom.t -> Types.SAtom.t
val union : Types.ArrayAtom.t -> Types.ArrayAtom.t -> Types.ArrayAtom.t
val apply_subst :
Variable.subst -> Types.ArrayAtom.t -> Types.ArrayAtom.t
val nb_diff : Types.ArrayAtom.t -> Types.ArrayAtom.t -> int
val compare_nb_diff :
Types.ArrayAtom.t -> Types.ArrayAtom.t -> Types.ArrayAtom.t -> int
val compare_nb_common :
Types.ArrayAtom.t -> Types.ArrayAtom.t -> Types.ArrayAtom.t -> int
val diff : Types.ArrayAtom.t -> Types.ArrayAtom.t -> Types.ArrayAtom.t
val alpha :
Types.ArrayAtom.t ->
Variable.t list -> Variable.t list * Types.ArrayAtom.t
val print : Format.formatter -> Types.ArrayAtom.t -> unit
end
end