1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
type t = Smtml.Expr.t
open Smtml.Expr
let false_ = Bool.false_
let false_i32 = value (Bitv (Smtml.Bitvector.of_int32 0l))
let true_ = Bool.true_
let true_i32 = value (Bitv (Smtml.Bitvector.of_int32 1l))
let of_concrete (i : bool) : t = if i then true_ else false_
let not e = Bool.not e
let or_ e1 e2 = Bool.or_ e1 e2
let and_ e1 e2 = Bool.and_ e1 e2
let to_i32 e =
match view e with
| Val True -> true_i32
| Val False -> false_i32
| Cvtop (Ty_bitv 32, ToBool, e') -> e'
| _ -> cvtop (Ty_bitv 32) OfBool e
let select_expr c ~if_true ~if_false = Bool.ite c if_true if_false
let pp = pp