Module Ics


module Ics: sig  end
raise Sys.Break exception upon

val init : int * bool * string * Pervasives.in_channel * Format.formatter -> unit
Parameters:
(n,pp,eot,inch,outch) : int * bool * string * Pervasives.in_channel * Format.formatter

raise Sys.Break exception upon


user interrupt.

val do_at_exit : unit -> unit
Parameters:
() : unit

Channels.


type inchannel = Pervasives.in_channel

type outchannel = Format.formatter
val channel_stdin : unit -> Pervasives.in_channel
Parameters:
() : unit
val channel_stdout : unit -> Format.formatter
Parameters:
() : unit
val channel_stderr : unit -> Format.formatter
Parameters:
() : unit
val inchannel_of_string : string -> Pervasives.in_channel
val outchannel_of_string : string -> Format.formatter
Parameters:
str : string

type name = Name.t
val name_of_string : string -> Name.t
val name_to_string : Name.t -> string
val name_eq : Name.t -> Name.t -> bool

Constrains.


type cnstrnt = Sign.t
val cnstrnt_pp : Sign.t -> unit
Parameters:
s : Sign.t
val cnstrnt_mk_zero : unit -> Sign.t
Parameters:
() : unit
val cnstrnt_mk_pos : unit -> Sign.t
Parameters:
() : unit
val cnstrnt_mk_neg : unit -> Sign.t
Parameters:
() : unit
val cnstrnt_mk_nonneg : unit -> Sign.t
Parameters:
() : unit
val cnstrnt_mk_nonpos : unit -> Sign.t
Parameters:
() : unit
val cnstrnt_is_empty : Sign.t -> bool
Parameters:
s : Sign.t
val cnstrnt_is_pos : Sign.t -> bool
Parameters:
s : Sign.t
val cnstrnt_is_neg : Sign.t -> bool
Parameters:
s : Sign.t
val cnstrnt_is_nonneg : Sign.t -> bool
Parameters:
s : Sign.t
val cnstrnt_is_nonpos : Sign.t -> bool
Parameters:
s : Sign.t
val cnstrnt_eq : Sign.t -> Sign.t -> bool
val cnstrnt_sub : Sign.t -> Sign.t -> bool
val cnstrnt_disjoint : Sign.t -> Sign.t -> bool
val cnstrnt_inter : Sign.t -> Sign.t -> Sign.t

Theories.


type th = int
val th_to_string : int -> string
Parameters:
n : int
val th_of_string : string -> int
Parameters:
s : string

Function symbols. These are partitioned into uninterpreted function symbols and function symbols interpreted in one of the builtin theories. For each interpreted function symbol there is a recognizer function is_xxx. Some values of type sym represent families of function symbols. The corresponding indices can be obtained using the destructor d_xxx functions (only after checking that is_xxx holds.


type sym = Sym.t
val sym_eq : Sym.t -> Sym.t -> bool
val sym_cmp : Sym.t -> Sym.t -> int
val sym_theory_of : Sym.t -> int
Parameters:
f : Sym.t
val sym_is_uninterp : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_d_uninterp : Sym.t -> Name.t
Parameters:
?? : Sym.t
val sym_mk_num : Mpa.Q.t -> Sym.t
val sym_is_num : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_d_num : Sym.t -> Mpa.Q.t
Parameters:
?? : Sym.t
val sym_mk_multq : Mpa.Q.t -> Sym.t
val sym_is_multq : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_d_multq : Sym.t -> Mpa.Q.t
Parameters:
?? : Sym.t
val sym_mk_add : unit -> Sym.t
Parameters:
() : unit
val sym_is_add : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_cons : unit -> Sym.t
Parameters:
() : unit
val sym_is_cons : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_car : unit -> Sym.t
Parameters:
() : unit
val sym_is_car : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_cdr : unit -> Sym.t
Parameters:
() : unit
val sym_is_cdr : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_inl : unit -> Sym.t
Parameters:
() : unit
val sym_is_inl : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_inr : unit -> Sym.t
Parameters:
() : unit
val sym_is_inr : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_outl : unit -> Sym.t
Parameters:
() : unit
val sym_is_outl : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_outr : unit -> Sym.t
Parameters:
() : unit
val sym_is_outr : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_bv_const : string -> Sym.t
Parameters:
s : string
val sym_is_bv_const : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_bv_conc : int -> int -> Sym.t
val sym_is_bv_conc : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_d_bv_conc : Sym.t -> int * int
Parameters:
?? : Sym.t
val sym_mk_bv_sub : int -> int -> int -> Sym.t
val sym_is_bv_sub : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_d_bv_sub : Sym.t -> int * int * int
Parameters:
?? : Sym.t
val sym_mk_bv_bitwise : int -> Sym.t
val sym_is_bv_bitwise : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_d_bv_bitwise : Sym.t -> int
Parameters:
?? : Sym.t
val sym_mk_mult : unit -> Sym.t
Parameters:
() : unit
val sym_is_mult : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_expt : int -> Sym.t
val sym_is_expt : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_d_expt : Sym.t -> int
Parameters:
?? : Sym.t
val sym_mk_apply : 'a -> Sym.t
Parameters:
() : 'a
val sym_is_apply : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_d_apply : Sym.t -> 'a option
Parameters:
?? : Sym.t
val sym_mk_abs : unit -> Sym.t
Parameters:
() : unit
val sym_is_abs : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_update : unit -> Sym.t
Parameters:
() : unit
val sym_is_select : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_select : unit -> Sym.t
Parameters:
() : unit
val sym_is_update : Sym.t -> bool
Parameters:
?? : Sym.t
val sym_mk_unsigned : unit -> Sym.t
Parameters:
() : unit
val sym_is_unsigned : Sym.t -> bool
Parameters:
?? : Sym.t

Variables.


type var = Var.t
val var_name_of : Var.t -> Name.t
val var_eq : Var.t -> Var.t -> bool
val var_cmp : Var.t -> Var.t -> int
val var_mk_external : Name.t -> Var.t
Parameters:
x : Name.t
val var_mk_bound : int -> Var.t
val var_is_external : Var.t -> bool
val var_is_bound : Var.t -> bool
val var_d_bound : Var.t -> int

Terms ar either variables, uninterpreted applications, or interpreted applications including boolean terms.


type term = Term.t
val term_of_string : string -> Term.t
Parameters:
s : string
val term_to_string : Term.t -> string
val term_input : Pervasives.in_channel -> Term.t
Parameters:
ch : Pervasives.in_channel
val term_output : Format.formatter -> Term.t -> unit
val term_pp : Term.t -> unit
Parameters:
a : Term.t

Construct a variable.

val term_mk_var : string -> Term.t
Parameters:
str : string

Uninterpred function application and function update.

val term_mk_uninterp : string -> Term.t list -> Term.t
Parameters:
x : string
l : Term.t list

Constructing arithmetic expressions.

val term_mk_num : Mpa.Q.t -> Term.t
val term_mk_multq : Mpa.Q.t -> Term.t -> Term.t
Parameters:
q : Mpa.Q.t
val term_mk_add : Term.t -> Term.t -> Term.t
val term_mk_addl : Term.t list -> Term.t
val term_mk_sub : Term.t -> Term.t -> Term.t
val term_mk_unary_minus : Term.t -> Term.t
val term_is_arith : Term.t -> bool

Constructing tuples and projections.

val term_mk_tuple : Term.t list -> Term.t
val term_mk_proj : int -> Term.t -> Term.t
Parameters:
i : int

Bitvector terms.

val term_mk_bvconst : string -> Term.t
Parameters:
s : string
val term_mk_bvsub : int * int * int -> Term.t -> Term.t
Parameters:
(n,i,j) : int * int * int
val term_mk_bvconc : int * int -> Term.t -> Term.t -> Term.t
Parameters:
(n,m) : int * int
val term_mk_bwite : int -> Term.t * Term.t * Term.t -> Term.t
Parameters:
n : int
(a,b,c) : Term.t * Term.t * Term.t
val term_mk_bwand : int -> Term.t -> Term.t -> Term.t
Parameters:
n : int
a : Term.t
b : Term.t
val term_mk_bwor : int -> Term.t -> Term.t -> Term.t
Parameters:
n : int
a : Term.t
b : Term.t
val term_mk_bwnot : int -> Term.t -> Term.t
Parameters:
n : int
a : Term.t

Boolean terms.

val term_mk_true : unit -> Term.t
Parameters:
() : unit
val term_mk_false : unit -> Term.t
Parameters:
() : unit

Coproducts.

val term_mk_inj : int -> Term.t -> Term.t
val term_mk_out : int -> Term.t -> Term.t

Interpretation Domains


type dom = Dom.t

Atoms.


type atom = Atom.t
val atom_pp : Atom.t -> unit
Parameters:
a : Atom.t
val atom_of_string : string -> Atom.t
Parameters:
s : string
val atom_to_string : Atom.t -> string
val atom_mk_equal : Term.t -> Term.t -> Atom.t
Parameters:
a : Term.t
b : Term.t
val atom_mk_diseq : Term.t -> Term.t -> Atom.t
Parameters:
a : Term.t
b : Term.t
val atom_mk_true : unit -> Atom.t
Parameters:
() : unit
val atom_mk_false : unit -> Atom.t
Parameters:
() : unit
val atom_mk_in : Term.t -> Sign.t -> Atom.t
Parameters:
a : Term.t
i : Sign.t
val atom_mk_lt : Term.t -> Term.t -> Atom.t
Parameters:
a : Term.t
b : Term.t
val atom_mk_le : Term.t -> Term.t -> Atom.t
Parameters:
a : Term.t
b : Term.t
val atom_mk_gt : Term.t -> Term.t -> Atom.t
Parameters:
a : Term.t
b : Term.t
val atom_mk_ge : Term.t -> Term.t -> Atom.t
Parameters:
a : Term.t
b : Term.t
val atom_is_negatable : Atom.t -> bool
val atom_negate : Atom.t -> Atom.t

type atoms = Atom.Set.t
val atoms_empty : unit -> Atom.Set.t
Parameters:
() : unit
val atoms_add : Atom.Set.elt -> Atom.Set.t -> Atom.Set.t
val atoms_singleton : Atom.Set.elt -> Atom.Set.t
val atoms_to_list : Atom.Set.t -> Atom.Set.elt list
Parameters:
atms : Atom.Set.t
val term_is_true : Term.t -> bool
val term_is_false : Term.t -> bool

Propositions


type prop = Prop.t
val prop_mk_true : unit -> Prop.t
Parameters:
() : unit
val prop_mk_false : unit -> Prop.t
Parameters:
() : unit
val prop_mk_var : Name.t -> Prop.t
val prop_mk_poslit : Atom.t -> Prop.t
val prop_mk_neglit : Atom.t -> Prop.t
val prop_mk_ite : Prop.t -> Prop.t -> Prop.t -> Prop.t
val prop_mk_conj : Prop.t list -> Prop.t
val prop_mk_disj : Prop.t list -> Prop.t
val prop_mk_iff : Prop.t -> Prop.t -> Prop.t
val prop_mk_neg : Prop.t -> Prop.t

type assignment = Prop.Assignment.t
val prop_sat : Context.t -> Prop.t -> Prop.Assignment.t option
Parameters:
s : Context.t
p : Prop.t

Nonlinear terms.

val term_mk_mult : Term.t -> Term.t -> Term.t
val term_mk_multl : Term.t list -> Term.t
Parameters:
?? : Term.t list
val term_mk_expt : int -> Term.t -> Term.t

Builtin applications.

val term_mk_unsigned : Term.t -> Term.t
val term_mk_update : Term.t -> Term.t -> Term.t -> Term.t
val term_mk_select : Term.t -> Term.t -> Term.t
val term_mk_div : Term.t -> Term.t -> Term.t
val term_mk_apply : Term.t -> Term.t list -> Term.t

Set of terms.


type terms = Term.Set.t
val terms_to_list : Term.Set.t -> Term.Set.elt list
val terms_of_list : Term.Set.elt list -> Term.Set.t

type 'a map = 'a Term.Map.t

Equalities.

val term_eq : Term.t -> Term.t -> bool
val term_cmp : Term.t -> Term.t -> int

Trace level.


type trace_level = string
val trace_reset : unit -> unit
val trace_add : Trace.level -> unit
val trace_remove : Trace.level -> unit
val trace_get : unit -> Trace.level list

Solution sets.


type solution = Solution.t
val solution_to_list : Solution.t -> (Term.t * Term.t) list

States.


type context = Context.t
val context_eq : Context.t -> Context.t -> bool
val context_empty : unit -> Context.t
Parameters:
() : unit
val context_ctxt_of : Context.t -> Atom.Set.t
val context_use : int -> Context.t -> Term.t -> Term.Set.t
Parameters:
i : int
val context_inv : int -> Context.t -> Term.t -> Term.t
Parameters:
i : int
val context_find : int -> Context.t -> Term.t -> Term.t
Parameters:
i : int
val context_apply : int -> Context.t -> Term.t -> Term.t
Parameters:
i : int
val context_mem : int -> Context.t -> Term.t -> bool
Parameters:
i : int
val context_solution_of : Context.t -> int -> Solution.t
Parameters:
s : Context.t
i : int
val context_pp : Context.t -> unit
Parameters:
s : Context.t
val context_ctxt_pp : Context.t -> unit
Parameters:
s : Context.t

Processing of new equalities.


type status = Context.t Context.Status.t
val is_consistent : 'a Context.Status.t -> bool
Parameters:
r : 'a Context.Status.t
val is_redundant : 'a Context.Status.t -> bool
Parameters:
r : 'a Context.Status.t
val is_inconsistent : 'a Context.Status.t -> bool
Parameters:
r : 'a Context.Status.t
val d_consistent : Context.t Context.Status.t -> Context.t
Parameters:
r : Context.t Context.Status.t
val process : Context.t -> Atom.t -> Context.t Context.Status.t
val split : Context.t -> Atom.Set.elt list
Parameters:
s : Context.t

Normalization functions

val can : Context.t -> Term.t -> Term.t
val read_from_channel : Pervasives.in_channel -> Result.t
Parameters:
ch : Pervasives.in_channel
val read_from_string : string -> Result.t
Parameters:
str : string
val cmd_rep : unit -> unit
Parameters:
() : unit
val cmd_batch : unit -> unit
Parameters:
() : unit
val cmd_output : Format.formatter -> Result.t -> unit
Parameters:
fmt : Format.formatter
result : Result.t
val cmd_error : Format.formatter -> string -> unit
Parameters:
fmt : Format.formatter
str : string
val cmd_quit : int -> Format.formatter -> unit
Parameters:
n : int
fmt : Format.formatter
val cmd_endmarker : Format.formatter -> unit
Parameters:
fmt : Format.formatter

Abstract sign interpretation.

val cnstrnt : Context.t -> Term.t -> Sign.t

Tools

val reset : unit -> unit
Parameters:
() : unit
val gc : unit -> unit
Parameters:
() : unit
val flush : unit -> unit

Lists.

val is_nil : 'a list -> bool
Parameters:
?? : 'a list
val cons : 'a -> 'a list -> 'a list
Parameters:
x : 'a
l : 'a list
val head : 'a list -> 'a
val tail : 'a list -> 'a list

Pairs.

val pair : 'a -> 'b -> 'a * 'b
Parameters:
x : 'a
y : 'b
val fst : 'a * 'b -> 'a
val snd : 'a * 'b -> 'b

Triples.

val triple : 'a -> 'b -> 'c -> 'a * 'b * 'c
Parameters:
x : 'a
y : 'b
z : 'c
val fst_of_triple : 'a * 'b * 'c -> 'a
Parameters:
(x,(),()) : 'a * 'b * 'c
val snd_of_triple : 'a * 'b * 'c -> 'b
Parameters:
((),y,()) : 'a * 'b * 'c
val third_of_triple : 'a * 'b * 'c -> 'c
Parameters:
((),(),z) : 'a * 'b * 'c

Quadruples.

val fst_of_quadruple : 'a * 'b * 'c * 'd -> 'a
Parameters:
(x1,(),(),()) : 'a * 'b * 'c * 'd
val snd_of_quadruple : 'a * 'b * 'c * 'd -> 'b
Parameters:
((),x2,(),()) : 'a * 'b * 'c * 'd
val third_of_quadruple : 'a * 'b * 'c * 'd -> 'c
Parameters:
((),(),x3,()) : 'a * 'b * 'c * 'd
val fourth_of_quadruple : 'a * 'b * 'c * 'd -> 'd
Parameters:
((),(),(),x4) : 'a * 'b * 'c * 'd

Options.

val is_some : 'a option -> bool
Parameters:
?? : 'a option
val is_none : 'a option -> bool
Parameters:
?? : 'a option
val value_of : 'a option -> 'a
Parameters:
?? : 'a option

Sleeping.

val sleep : int -> unit

Multi-precision arithmetic.


type q = Mpa.Q.t
val ints_of_num : Mpa.Q.t -> string * string
Parameters:
q : Mpa.Q.t
val num_of_int : int -> Mpa.Q.t
val num_of_ints : int -> int -> Mpa.Q.t
Parameters:
i1 : int
i2 : int
val string_of_num : Mpa.Q.t -> string
val num_of_string : string -> Mpa.Q.t