Module type Expr.S

type var
include Std_extra.Types.TYPE with type t = var expr
include Std_extra.Types.PRINTABLE with type t = var expr
type t = var expr
val compare : t -> t -> int
val order : t -> t -> Std_extra.Types.order
val equal : t -> t -> bool
val hash : t -> int
val of_node : var expr_node -> var expr

Constructors: These build hashconsed expressions. They also immediatly evaluate constant expressions, so binop PlusA one one is turned into 2.

val var : var -> var expr
val of_int : int -> var expr
val of_const : Z.t -> var expr
val unop : unop -> var expr -> var expr
val binop : binop -> var expr -> var expr -> var expr
val if_ : var expr -> var expr -> var expr -> var expr
val zero : var expr
val one : var expr
val two : var expr
val minus_one : var expr
val simplify_expr : (var expr -> Z.t option) -> var expr -> var expr

simplify_expr query_is_constant expr performs a number of small rewrites on the expression expr. query_is_constant is used to determine if some variables/expression are constant.