Skip to content

Commit

Permalink
Simplify trivial ites (#731)
Browse files Browse the repository at this point in the history
This patch adds some simple checks in [Expr.mk_ite] to simplify the
trivial ites `(ite t u u)`, `(ite true t u)` and `(ite false t u)`.
  • Loading branch information
bclement-ocp authored Jul 12, 2023
1 parent 12fca0e commit e37a65e
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/lib/structures/expr.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1045,9 +1045,13 @@ let mk_if cond f2 f3 =
(mk_and cond f2 true) (mk_and (neg cond) f3 true) false

let mk_ite cond th el =
let ty = type_info th in
if ty == Ty.Tbool then mk_if cond th el
else mk_term (Sy.Op Sy.Tite) [cond; th; el] ty
if equal th el then th
else if equal cond vrai then th
else if equal cond faux then el
else
let ty = type_info th in
if ty == Ty.Tbool then mk_if cond th el
else mk_term (Sy.Op Sy.Tite) [cond; th; el] ty

let [@inline always] const_term e =
(* we use this function because depth is currently not correct to
Expand Down

0 comments on commit e37a65e

Please sign in to comment.