Module Bitvector


module Bitvector: sig  end
Creating fresh bitvector variables for solver. The index variable are always reset to the current value when solver is called.

val const : Bitv.t -> Sym.t
Parameters:
c : Bitv.t
val conc : int -> int -> Sym.t
Parameters:
n : int
m : int
val sub : int -> int -> int -> Sym.t
Parameters:
i : int
j : int
n : int
val bitwise : int -> Sym.t
Parameters:
n : int
val is_bvsym : Sym.t -> bool
Parameters:
?? : Sym.t
val d_bvsym : Sym.t -> Sym.bv option
Parameters:
?? : Sym.t
val is_interp : Term.t -> bool
Parameters:
?? : Term.t
val d_interp : Term.t -> (Sym.bv * Term.t list) option
Parameters:
?? : Term.t
val mk_const : Bitv.t -> Term.t
Parameters:
c : Bitv.t
val is_const : Term.t -> bool
Parameters:
a : Term.t
val mk_eps : Term.t
val is_eps : Term.t -> bool
Parameters:
a : Term.t
val mk_zero : int -> Term.t
Parameters:
n : int
val is_zero : Term.t -> bool
Parameters:
a : Term.t
val mk_one : int -> Term.t
Parameters:
n : int
val is_one : Term.t -> bool
Parameters:
a : Term.t

Creating fresh bitvector variables for solver. The index variable are always reset to the current value when solver is called.

val mk_fresh : int -> Term.t

Bitvector symbols

val width : Term.t -> int option
Parameters:
a : Term.t
val iter : (Term.t -> unit) -> Term.t -> unit
Parameters:
f : Term.t -> unit
a : Term.t

Fold functional.

val fold : (Term.t -> 'a -> 'a) -> Term.t -> 'a -> 'a
Parameters:
f : Term.t -> 'a -> 'a
a : Term.t
e : 'a
val is_bitwise : Term.t -> bool
Parameters:
a : Term.t
val d_bitwise : Term.t -> (int * Term.t * Term.t * Term.t) option
Parameters:
a : Term.t
val d_conc : Term.t -> (int * int * Term.t * Term.t) option
Parameters:
a : Term.t
val d_const : Term.t -> Bitv.t option
Parameters:
a : Term.t
val d_sub : Term.t -> (int * int * int * Term.t) option
Parameters:
a : Term.t

Building up Bitvector BDDs

val is_bvbdd : Term.t -> bool
Parameters:
a : Term.t
val cofactors : Term.t -> Term.t -> Term.t * Term.t
Parameters:
x : Term.t
a : Term.t
val topvar : Term.t -> Term.t -> Term.t -> Term.t
Parameters:
x : Term.t
s2 : Term.t
s3 : Term.t
module H3: sig  end
val ht : Term.t H3.t
val build : int -> H3.key -> Term.t
Parameters:
n : int
s3 : H3.key
val build_fun : int -> H3.key -> Term.t
Parameters:
n : int
(s1,s2,s3) : H3.key

Term constructors.

val mk_sub : int -> int -> int -> Term.t -> Term.t
Parameters:
n : int
i : int
j : int
a : Term.t
val mk_conc : int -> int -> Term.t -> Term.t -> Term.t
Parameters:
n : int
m : int
a : Term.t
b : Term.t
val merge : int -> int -> Term.t -> Term.t -> Term.t option
Parameters:
n : int
m : int
a : Term.t
b : Term.t
val mk_conc3 : int -> int -> int -> Term.t -> Term.t -> Term.t -> Term.t
Parameters:
n : int
m : int
k : int
a : Term.t
b : Term.t
c : Term.t
val mk_bitwise : int -> Term.t -> Term.t -> Term.t -> Term.t
Parameters:
n : int
a : Term.t
b : Term.t
c : Term.t
val lift : int -> Term.t -> Term.t
Parameters:
n : int
a : Term.t
val drop : Term.t -> Term.t
Parameters:
a : Term.t
val cut : int -> int -> Term.t -> Term.t * Term.t
Parameters:
n : int
i : int
a : Term.t

Derived bitwise constructors.

val mk_bwconj : int -> Term.t -> Term.t -> Term.t
Parameters:
n : int
a : Term.t
b : Term.t
val mk_bwdisj : int -> Term.t -> Term.t -> Term.t
Parameters:
n : int
a : Term.t
b : Term.t
val mk_bwneg : int -> Term.t -> Term.t
Parameters:
n : int
a : Term.t
val mk_bwimp : int -> Term.t -> Term.t -> Term.t
Parameters:
n : int
a1 : Term.t
a2 : Term.t
val mk_bwiff : int -> Term.t -> Term.t -> Term.t
Parameters:
n : int
a1 : Term.t
a2 : Term.t

Mapping over bitvector terms.

val map : (Term.t -> Term.t) -> Term.t -> Term.t
Parameters:
f : Term.t -> Term.t

Does term a occur interpreted in b.

val occurs : Term.t -> Term.t -> bool
Parameters:
a : Term.t
b : Term.t

Sigmatizing an expression.

val sigma : Sym.bv -> Term.t list -> Term.t
Parameters:
op : Sym.bv
l : Term.t list
val mk_iterate : int -> Term.t -> int -> Term.t
Parameters:
n : int
b : Term.t
?? : int
val decompose : Term.t * Term.t -> (Term.t * Term.t) list
Parameters:
e : Term.t * Term.t

Solving is based on the equation ite(x,p,n) = (p or n) and exists delta. x = (p and (n => delta))

val solve_bitwise : int -> Term.t * Term.t -> (Term.t * Term.t) list
Parameters:
n : int
(a,b) : Term.t * Term.t

Adding a solved pair a |-> b to the list of solved forms sl, and propagating this new binding to the unsolved equalities el and the rhs of sl. It also makes sure that fresh variables a are never added to sl but only propagated.

val add : Term.t ->
Term.t ->
(Term.t * Term.t) list * (Term.t * Term.t) list ->
(Term.t * Term.t) list * (Term.t * Term.t) list
Parameters:
a : Term.t
b : Term.t
(el,sl) : (Term.t * Term.t) list * (Term.t * Term.t) list
val is_fresh_bv_var : Term.t -> bool
Parameters:
() : Term.t
val inste : (Term.t * Term.t) list -> Term.t -> Term.t -> (Term.t * Term.t) list
Parameters:
el : (Term.t * Term.t) list
a : Term.t
b : Term.t
val insts : (Term.t * Term.t) list -> Term.t -> Term.t -> (Term.t * Term.t) list
Parameters:
sl : (Term.t * Term.t) list
a : Term.t
b : Term.t
val inconsistent : Term.t -> Term.t -> bool
Parameters:
a : Term.t
b : Term.t
val apply1 : Term.t -> Term.t -> Term.t -> Term.t
Parameters:
a : Term.t
x : Term.t
b : Term.t

Toplevel solver.

val solve : Fact.equal -> Fact.equal list
Parameters:
e : Fact.equal
val solvel : (Term.t * Term.t) list * (Term.t * Term.t) list -> (Term.t * Term.t) list
Parameters:
(el,sl) : (Term.t * Term.t) list * (Term.t * Term.t) list
val solve_sub_sub : Term.t -> int -> int -> int -> int -> int -> Term.t * Term.t
Parameters:
x : Term.t
n : int
i : int
j : int
k : int
l : int