Abstract Syntax Tree (AST) for Expressions. This module defines the representation of terms and expressions in the AST, along with constructors, accessors, simplification utilities, and pretty-printing functions. It also includes submodules for handling Boolean expressions, sets, bitvectors, and floating-point arithmetic.
Expression TypesA term in the abstract syntax tree.
The different types of expressions.
Constructors and Accessorsmake expr
creates a new term from the given expression.
view term
extracts the underlying expression from a term.
hash term
computes the hash of a term.
val equal : t -> t -> bool
equal t1 t2
compares two terms for equality.
val compare : t -> t -> int
compare t1 t2
compares two terms lexicographically.
Type and Symbol Handlingty expr
determines the type of an expression.
val is_symbolic : t -> bool
is_symbolic expr
checks if an expression is symbolic (i.e., contains symbolic variables).
get_symbols exprs
extracts all symbolic variables from a list of expressions.
negate_relop expr
negates a relational operation, if applicable. Returns an error if the expression is not a relational operation.
Pretty Printingpp fmt term
prints a term in a human-readable format using the formatter fmt
.
pp_smt fmt terms
prints a list of terms in SMT-LIB format using the formatter fmt
.
pp_list fmt terms
prints a list of expressions in a human-readable format using the formatter fmt
.
val to_string : t -> string
to_string term
converts a term to a string representation.
Expression Constructorsvalue v
constructs a value expression from the given value.
val ptr : int32 -> t -> t
ptr base offset
constructs a pointer expression with the given base address and offset.
symbol sym
constructs a symbolic variable expression from the given symbol.
app sym args
constructs a function application expression with the given symbol and arguments.
val let_in : t list -> t -> t
let_in bindings body
constructs a let-binding expression with the given bindings and body.
val forall : t list -> t -> t
forall bindings body
constructs a universal quantification expression with the given bindings and body.
val exists : t list -> t -> t
exists bindings body
constructs an existential quantification expression with the given bindings and body.
Smart Constructors for OperationsThese constructors apply simplifications during construction.
unop ty op expr
applies a unary operation with simplification.
binop ty op expr1 expr2
applies a binary operation with simplification.
triop ty op expr1 expr2 expr3
applies a ternary operation with simplification.
relop ty op expr1 expr2
applies a relational operation with simplification.
cvtop ty op expr
applies a conversion operation with simplification.
naryop ty op exprs
applies an N-ary operation with simplification.
extract expr ~high ~low
extracts a bit range with simplification.
extract2 expr pos
extracts a bit range with simplification.
concat expr1 expr2
concatenates two expressions with simplification.
val concat3 : msb :t -> lsb :t -> int -> t
concat3 ~msb ~lsb size
concatenates two expressions with simplification, specifying the size of the result.
Dumb Constructors for OperationsThese constructors do not apply simplifications.
unop' ty op expr
applies a unary operation without simplification.
binop' ty op expr1 expr2
applies a binary operation without simplification.
triop' ty op expr1 expr2 expr3
applies a ternary operation without simplification.
relop' ty op expr1 expr2
applies a relational operation without simplification.
cvtop' ty op expr
applies a conversion operation without simplification.
naryop' ty op exprs
applies an N-ary operation without simplification.
extract' expr ~high ~low
extracts a bit range without simplification.
val concat' : t -> t -> t
concat' expr1 expr2
concatenates two expressions without simplification.
Expression Simplificationsimplify expr
simplifies an expression until a fixpoint is reached.
Hash-Consing Module Boolean Expressionsmodule Bool : sig ... end
Set Module Bitvectorsmodule Bitv : sig ... end
Floating-Points