Microsoft.Z3
Algebraic numbers
Arithmetic expressions (int/real)
Expressions are terms.
The abstract syntax tree (AST) class.
Internal base class for interfacing with native Z3 objects.
Should not be used externally.
Finalizer.
Disposes of the underlying native Z3 object.
Comparison operator.
An AST
An AST
True if and are from the same context
and represent the same sort; false otherwise.
Comparison operator.
An AST
An AST
True if and are not from the same context
or represent different sorts; false otherwise.
Object comparison.
Object Comparison.
Another AST
Negative if the object should be sorted before , positive if after else zero.
The AST's hash code.
A hash code
Translates (copies) the AST to the Context .
A context
A copy of the AST which is associated with
A string representation of the AST.
A string representation of the AST in s-expression notation.
A unique identifier for the AST (unique among all ASTs).
The kind of the AST.
Indicates whether the AST is an Expr
Indicates whether the AST is an application
Indicates whether the AST is a BoundVariable
Indicates whether the AST is a Quantifier
Indicates whether the AST is a Sort
Indicates whether the AST is a FunctionDeclaration
DecRefQueue interface
Sets the limit on numbers of objects that are kept back at GC collection.
Returns a simplified version of the expression.
A set of parameters to configure the simplifier
Update the arguments of the expression using the arguments
The number of new arguments should coincide with the current number of arguments.
Substitute every occurrence of from[i] in the expression with to[i], for i smaller than num_exprs.
The result is the new expression. The arrays from and to must have size num_exprs.
For every i smaller than num_exprs, we must have that
sort of from[i] must be equal to sort of to[i].
Substitute every occurrence of from in the expression with to.
Substitute the free variables in the expression with the expressions in
For every i smaller than num_exprs, the variable with de-Bruijn index i is replaced with term to[i].
Translates (copies) the term to the Context .
A context
A copy of the term which is associated with
Returns a string representation of the expression.
Constructor for Expr
The function declaration of the function that is applied in this expression.
Indicates whether the expression is the true or false expression
or something else (Z3_L_UNDEF).
The number of arguments of the expression.
The arguments of the expression.
Indicates whether the term is a numeral
Indicates whether the term is well-sorted.
True if the term is well-sorted, false otherwise.
The Sort of the term.
Indicates whether the term represents a constant.
Indicates whether the term is an integer numeral.
Indicates whether the term is a real numeral.
Indicates whether the term is an algebraic number
Indicates whether the term has Boolean sort.
Indicates whether the term is the constant true.
Indicates whether the term is the constant false.
Indicates whether the term is an equality predicate.
Indicates whether the term is an n-ary distinct predicate (every argument is mutually distinct).
Indicates whether the term is a ternary if-then-else term
Indicates whether the term is an n-ary conjunction
Indicates whether the term is an n-ary disjunction
Indicates whether the term is an if-and-only-if (Boolean equivalence, binary)
Indicates whether the term is an exclusive or
Indicates whether the term is a negation
Indicates whether the term is an implication
Indicates whether the term is marked for interpolation.
Indicates whether the term is of integer sort.
Indicates whether the term is of sort real.
Indicates whether the term is an arithmetic numeral.
Indicates whether the term is a less-than-or-equal
Indicates whether the term is a greater-than-or-equal
Indicates whether the term is a less-than
Indicates whether the term is a greater-than
Indicates whether the term is addition (binary)
Indicates whether the term is subtraction (binary)
Indicates whether the term is a unary minus
Indicates whether the term is multiplication (binary)
Indicates whether the term is division (binary)
Indicates whether the term is integer division (binary)
Indicates whether the term is remainder (binary)
Indicates whether the term is modulus (binary)
Indicates whether the term is a coercion of integer to real (unary)
Indicates whether the term is a coercion of real to integer (unary)
Indicates whether the term is a check that tests whether a real is integral (unary)
Indicates whether the term is of an array sort.
Indicates whether the term is an array store.
It satisfies select(store(a,i,v),j) = if i = j then v else select(a,j).
Array store takes at least 3 arguments.
Indicates whether the term is an array select.
Indicates whether the term is a constant array.
For example, select(const(v),i) = v holds for every v and i. The function is unary.
Indicates whether the term is a default array.
For example default(const(v)) = v. The function is unary.
Indicates whether the term is an array map.
It satisfies map[f](a1,..,a_n)[i] = f(a1[i],...,a_n[i]) for every i.
Indicates whether the term is an as-array term.
An as-array term is n array value that behaves as the function graph of the
function passed as parameter.
Indicates whether the term is set union
Indicates whether the term is set intersection
Indicates whether the term is set difference
Indicates whether the term is set complement
Indicates whether the term is set subset
Indicates whether the terms is of bit-vector sort.
Indicates whether the term is a bit-vector numeral
Indicates whether the term is a one-bit bit-vector with value one
Indicates whether the term is a one-bit bit-vector with value zero
Indicates whether the term is a bit-vector unary minus
Indicates whether the term is a bit-vector addition (binary)
Indicates whether the term is a bit-vector subtraction (binary)
Indicates whether the term is a bit-vector multiplication (binary)
Indicates whether the term is a bit-vector signed division (binary)
Indicates whether the term is a bit-vector unsigned division (binary)
Indicates whether the term is a bit-vector signed remainder (binary)
Indicates whether the term is a bit-vector unsigned remainder (binary)
Indicates whether the term is a bit-vector signed modulus
Indicates whether the term is a bit-vector signed division by zero
Indicates whether the term is a bit-vector unsigned division by zero
Indicates whether the term is a bit-vector signed remainder by zero
Indicates whether the term is a bit-vector unsigned remainder by zero
Indicates whether the term is a bit-vector signed modulus by zero
Indicates whether the term is an unsigned bit-vector less-than-or-equal
Indicates whether the term is a signed bit-vector less-than-or-equal
Indicates whether the term is an unsigned bit-vector greater-than-or-equal
Indicates whether the term is a signed bit-vector greater-than-or-equal
Indicates whether the term is an unsigned bit-vector less-than
Indicates whether the term is a signed bit-vector less-than
Indicates whether the term is an unsigned bit-vector greater-than
Indicates whether the term is a signed bit-vector greater-than
Indicates whether the term is a bit-wise AND
Indicates whether the term is a bit-wise OR
Indicates whether the term is a bit-wise NOT
Indicates whether the term is a bit-wise XOR
Indicates whether the term is a bit-wise NAND
Indicates whether the term is a bit-wise NOR
Indicates whether the term is a bit-wise XNOR
Indicates whether the term is a bit-vector concatenation (binary)
Indicates whether the term is a bit-vector sign extension
Indicates whether the term is a bit-vector zero extension
Indicates whether the term is a bit-vector extraction
Indicates whether the term is a bit-vector repetition
Indicates whether the term is a bit-vector reduce OR
Indicates whether the term is a bit-vector reduce AND
Indicates whether the term is a bit-vector comparison
Indicates whether the term is a bit-vector shift left
Indicates whether the term is a bit-vector logical shift right
Indicates whether the term is a bit-vector arithmetic shift left
Indicates whether the term is a bit-vector rotate left
Indicates whether the term is a bit-vector rotate right
Indicates whether the term is a bit-vector rotate left (extended)
Similar to Z3_OP_ROTATE_LEFT, but it is a binary operator instead of a parametric one.
Indicates whether the term is a bit-vector rotate right (extended)
Similar to Z3_OP_ROTATE_RIGHT, but it is a binary operator instead of a parametric one.
Indicates whether the term is a coercion from integer to bit-vector
This function is not supported by the decision procedures. Only the most
rudimentary simplification rules are applied to this function.
Indicates whether the term is a coercion from bit-vector to integer
This function is not supported by the decision procedures. Only the most
rudimentary simplification rules are applied to this function.
Indicates whether the term is a bit-vector carry
Compute the carry bit in a full-adder. The meaning is given by the
equivalence (carry l1 l2 l3) <=> (or (and l1 l2) (and l1 l3) (and l2 l3)))
Indicates whether the term is a bit-vector ternary XOR
The meaning is given by the equivalence (xor3 l1 l2 l3) <=> (xor (xor l1 l2) l3)
Indicates whether the term is a label (used by the Boogie Verification condition generator).
The label has two parameters, a string and a Boolean polarity. It takes one argument, a formula.
Indicates whether the term is a label literal (used by the Boogie Verification condition generator).
A label literal has a set of string parameters. It takes no arguments.
Indicates whether the term is a binary equivalence modulo namings.
This binary predicate is used in proof terms.
It captures equisatisfiability and equivalence modulo renamings.
Indicates whether the term is a Proof for the expression 'true'.
Indicates whether the term is a proof for a fact asserted by the user.
Indicates whether the term is a proof for a fact (tagged as goal) asserted by the user.
Indicates whether the term is proof via modus ponens
Given a proof for p and a proof for (implies p q), produces a proof for q.
T1: p
T2: (implies p q)
[mp T1 T2]: q
The second antecedents may also be a proof for (iff p q).
Indicates whether the term is a proof for (R t t), where R is a reflexive relation.
This proof object has no antecedents.
The only reflexive relations that are used are
equivalence modulo namings, equality and equivalence.
That is, R is either '~', '=' or 'iff'.
Indicates whether the term is proof by symmetricity of a relation
Given an symmetric relation R and a proof for (R t s), produces a proof for (R s t).
T1: (R t s)
[symmetry T1]: (R s t)
T1 is the antecedent of this proof object.
Indicates whether the term is a proof by transitivity of a relation
Given a transitive relation R, and proofs for (R t s) and (R s u), produces a proof
for (R t u).
T1: (R t s)
T2: (R s u)
[trans T1 T2]: (R t u)
Indicates whether the term is a proof by condensed transitivity of a relation
Condensed transitivity proof. This proof object is only used if the parameter PROOF_MODE is 1.
It combines several symmetry and transitivity proofs.
Example:
T1: (R a b)
T2: (R c b)
T3: (R c d)
[trans* T1 T2 T3]: (R a d)
R must be a symmetric and transitive relation.
Assuming that this proof object is a proof for (R s t), then
a proof checker must check if it is possible to prove (R s t)
using the antecedents, symmetry and transitivity. That is,
if there is a path from s to t, if we view every
antecedent (R a b) as an edge between a and b.
Indicates whether the term is a monotonicity proof object.
T1: (R t_1 s_1)
...
Tn: (R t_n s_n)
[monotonicity T1 ... Tn]: (R (f t_1 ... t_n) (f s_1 ... s_n))
Remark: if t_i == s_i, then the antecedent Ti is suppressed.
That is, reflexivity proofs are supressed to save space.
Indicates whether the term is a quant-intro proof
Given a proof for (~ p q), produces a proof for (~ (forall (x) p) (forall (x) q)).
T1: (~ p q)
[quant-intro T1]: (~ (forall (x) p) (forall (x) q))
Indicates whether the term is a distributivity proof object.
Given that f (= or) distributes over g (= and), produces a proof for
(= (f a (g c d))
(g (f a c) (f a d)))
If f and g are associative, this proof also justifies the following equality:
(= (f (g a b) (g c d))
(g (f a c) (f a d) (f b c) (f b d)))
where each f and g can have arbitrary number of arguments.
This proof object has no antecedents.
Remark. This rule is used by the CNF conversion pass and
instantiated by f = or, and g = and.
Indicates whether the term is a proof by elimination of AND
Given a proof for (and l_1 ... l_n), produces a proof for l_i
T1: (and l_1 ... l_n)
[and-elim T1]: l_i
Indicates whether the term is a proof by eliminiation of not-or
Given a proof for (not (or l_1 ... l_n)), produces a proof for (not l_i).
T1: (not (or l_1 ... l_n))
[not-or-elim T1]: (not l_i)
Indicates whether the term is a proof by rewriting
A proof for a local rewriting step (= t s).
The head function symbol of t is interpreted.
This proof object has no antecedents.
The conclusion of a rewrite rule is either an equality (= t s),
an equivalence (iff t s), or equi-satisfiability (~ t s).
Remark: if f is bool, then = is iff.
Examples:
(= (+ x 0) x)
(= (+ x 1 2) (+ 3 x))
(iff (or x false) x)
Indicates whether the term is a proof by rewriting
A proof for rewriting an expression t into an expression s.
This proof object is used if the parameter PROOF_MODE is 1.
This proof object can have n antecedents.
The antecedents are proofs for equalities used as substitution rules.
The object is also used in a few cases if the parameter PROOF_MODE is 2.
The cases are:
- When applying contextual simplification (CONTEXT_SIMPLIFIER=true)
- When converting bit-vectors to Booleans (BIT2BOOL=true)
- When pulling ite expression up (PULL_CHEAP_ITE_TREES=true)
Indicates whether the term is a proof for pulling quantifiers out.
A proof for (iff (f (forall (x) q(x)) r) (forall (x) (f (q x) r))). This proof object has no antecedents.
Indicates whether the term is a proof for pulling quantifiers out.
A proof for (iff P Q) where Q is in prenex normal form.
This proof object is only used if the parameter PROOF_MODE is 1.
This proof object has no antecedents
Indicates whether the term is a proof for pushing quantifiers in.
A proof for:
(iff (forall (x_1 ... x_m) (and p_1[x_1 ... x_m] ... p_n[x_1 ... x_m]))
(and (forall (x_1 ... x_m) p_1[x_1 ... x_m])
...
(forall (x_1 ... x_m) p_n[x_1 ... x_m])))
This proof object has no antecedents
Indicates whether the term is a proof for elimination of unused variables.
A proof for (iff (forall (x_1 ... x_n y_1 ... y_m) p[x_1 ... x_n])
(forall (x_1 ... x_n) p[x_1 ... x_n]))
It is used to justify the elimination of unused variables.
This proof object has no antecedents.
Indicates whether the term is a proof for destructive equality resolution
A proof for destructive equality resolution:
(iff (forall (x) (or (not (= x t)) P[x])) P[t])
if x does not occur in t.
This proof object has no antecedents.
Several variables can be eliminated simultaneously.
Indicates whether the term is a proof for quantifier instantiation
A proof of (or (not (forall (x) (P x))) (P a))
Indicates whether the term is a hypthesis marker.
Mark a hypothesis in a natural deduction style proof.
Indicates whether the term is a proof by lemma
T1: false
[lemma T1]: (or (not l_1) ... (not l_n))
This proof object has one antecedent: a hypothetical proof for false.
It converts the proof in a proof for (or (not l_1) ... (not l_n)),
when T1 contains the hypotheses: l_1, ..., l_n.
Indicates whether the term is a proof by unit resolution
T1: (or l_1 ... l_n l_1' ... l_m')
T2: (not l_1)
...
T(n+1): (not l_n)
[unit-resolution T1 ... T(n+1)]: (or l_1' ... l_m')
Indicates whether the term is a proof by iff-true
T1: p
[iff-true T1]: (iff p true)
Indicates whether the term is a proof by iff-false
T1: (not p)
[iff-false T1]: (iff p false)
Indicates whether the term is a proof by commutativity
[comm]: (= (f a b) (f b a))
f is a commutative operator.
This proof object has no antecedents.
Remark: if f is bool, then = is iff.
Indicates whether the term is a proof for Tseitin-like axioms
Proof object used to justify Tseitin's like axioms:
(or (not (and p q)) p)
(or (not (and p q)) q)
(or (not (and p q r)) p)
(or (not (and p q r)) q)
(or (not (and p q r)) r)
...
(or (and p q) (not p) (not q))
(or (not (or p q)) p q)
(or (or p q) (not p))
(or (or p q) (not q))
(or (not (iff p q)) (not p) q)
(or (not (iff p q)) p (not q))
(or (iff p q) (not p) (not q))
(or (iff p q) p q)
(or (not (ite a b c)) (not a) b)
(or (not (ite a b c)) a c)
(or (ite a b c) (not a) (not b))
(or (ite a b c) a (not c))
(or (not (not a)) (not a))
(or (not a) a)
This proof object has no antecedents.
Note: all axioms are propositional tautologies.
Note also that 'and' and 'or' can take multiple arguments.
You can recover the propositional tautologies by
unfolding the Boolean connectives in the axioms a small
bounded number of steps (=3).
Indicates whether the term is a proof for introduction of a name
Introduces a name for a formula/term.
Suppose e is an expression with free variables x, and def-intro
introduces the name n(x). The possible cases are:
When e is of Boolean type:
[def-intro]: (and (or n (not e)) (or (not n) e))
or:
[def-intro]: (or (not n) e)
when e only occurs positively.
When e is of the form (ite cond th el):
[def-intro]: (and (or (not cond) (= n th)) (or cond (= n el)))
Otherwise:
[def-intro]: (= n e)
Indicates whether the term is a proof for application of a definition
[apply-def T1]: F ~ n
F is 'equivalent' to n, given that T1 is a proof that
n is a name for F.
Indicates whether the term is a proof iff-oeq
T1: (iff p q)
[iff~ T1]: (~ p q)
Indicates whether the term is a proof for a positive NNF step
Proof for a (positive) NNF step. Example:
T1: (not s_1) ~ r_1
T2: (not s_2) ~ r_2
T3: s_1 ~ r_1'
T4: s_2 ~ r_2'
[nnf-pos T1 T2 T3 T4]: (~ (iff s_1 s_2)
(and (or r_1 r_2') (or r_1' r_2)))
The negation normal form steps NNF_POS and NNF_NEG are used in the following cases:
(a) When creating the NNF of a positive force quantifier.
The quantifier is retained (unless the bound variables are eliminated).
Example
T1: q ~ q_new
[nnf-pos T1]: (~ (forall (x T) q) (forall (x T) q_new))
(b) When recursively creating NNF over Boolean formulas, where the top-level
connective is changed during NNF conversion. The relevant Boolean connectives
for NNF_POS are 'implies', 'iff', 'xor', 'ite'.
NNF_NEG furthermore handles the case where negation is pushed
over Boolean connectives 'and' and 'or'.
Indicates whether the term is a proof for a negative NNF step
Proof for a (negative) NNF step. Examples:
T1: (not s_1) ~ r_1
...
Tn: (not s_n) ~ r_n
[nnf-neg T1 ... Tn]: (not (and s_1 ... s_n)) ~ (or r_1 ... r_n)
and
T1: (not s_1) ~ r_1
...
Tn: (not s_n) ~ r_n
[nnf-neg T1 ... Tn]: (not (or s_1 ... s_n)) ~ (and r_1 ... r_n)
and
T1: (not s_1) ~ r_1
T2: (not s_2) ~ r_2
T3: s_1 ~ r_1'
T4: s_2 ~ r_2'
[nnf-neg T1 T2 T3 T4]: (~ (not (iff s_1 s_2))
(and (or r_1 r_2) (or r_1' r_2')))
Indicates whether the term is a proof for (~ P Q) here Q is in negation normal form.
A proof for (~ P Q) where Q is in negation normal form.
This proof object is only used if the parameter PROOF_MODE is 1.
This proof object may have n antecedents. Each antecedent is a PR_DEF_INTRO.
Indicates whether the term is a proof for (~ P Q) where Q is in conjunctive normal form.
A proof for (~ P Q) where Q is in conjunctive normal form.
This proof object is only used if the parameter PROOF_MODE is 1.
This proof object may have n antecedents. Each antecedent is a PR_DEF_INTRO.
Indicates whether the term is a proof for a Skolemization step
Proof for:
[sk]: (~ (not (forall x (p x y))) (not (p (sk y) y)))
[sk]: (~ (exists x (p x y)) (p (sk y) y))
This proof object has no antecedents.
Indicates whether the term is a proof by modus ponens for equi-satisfiability.
Modus ponens style rule for equi-satisfiability.
T1: p
T2: (~ p q)
[mp~ T1 T2]: q
Indicates whether the term is a proof for theory lemma
Generic proof for theory lemmas.
The theory lemma function comes with one or more parameters.
The first parameter indicates the name of the theory.
For the theory of arithmetic, additional parameters provide hints for
checking the theory lemma.
The hints for arithmetic are:
- farkas - followed by rational coefficients. Multiply the coefficients to the
inequalities in the lemma, add the (negated) inequalities and obtain a contradiction.
- triangle-eq - Indicates a lemma related to the equivalence:
(iff (= t1 t2) (and (<= t1 t2) (<= t2 t1)))
- gcd-test - Indicates an integer linear arithmetic lemma that uses a gcd test.
Indicates whether the term is of relation sort.
Indicates whether the term is an relation store
Insert a record into a relation.
The function takes n+1 arguments, where the first argument is the relation and the remaining n elements
correspond to the n columns of the relation.
Indicates whether the term is an empty relation
Indicates whether the term is a test for the emptiness of a relation
Indicates whether the term is a relational join
Indicates whether the term is the union or convex hull of two relations.
The function takes two arguments.
Indicates whether the term is the widening of two relations
The function takes two arguments.
Indicates whether the term is a projection of columns (provided as numbers in the parameters).
The function takes one argument.
Indicates whether the term is a relation filter
Filter (restrict) a relation with respect to a predicate.
The first argument is a relation.
The second argument is a predicate with free de-Brujin indices
corresponding to the columns of the relation.
So the first column in the relation has index 0.
Indicates whether the term is an intersection of a relation with the negation of another.
Intersect the first relation with respect to negation
of the second relation (the function takes two arguments).
Logically, the specification can be described by a function
target = filter_by_negation(pos, neg, columns)
where columns are pairs c1, d1, .., cN, dN of columns from pos and neg, such that
target are elements in x in pos, such that there is no y in neg that agrees with
x on the columns c1, d1, .., cN, dN.
Indicates whether the term is the renaming of a column in a relation
The function takes one argument.
The parameters contain the renaming as a cycle.
Indicates whether the term is the complement of a relation
Indicates whether the term is a relational select
Check if a record is an element of the relation.
The function takes n+1 arguments, where the first argument is a relation,
and the remaining n arguments correspond to a record.
Indicates whether the term is a relational clone (copy)
Create a fresh copy (clone) of a relation.
The function is logically the identity, but
in the context of a register machine allows
for terms of kind
to perform destructive updates to the first argument.
Indicates whether the term is of an array sort.
Indicates whether the term is a less than predicate over a finite domain.
Indicates whether the terms is of floating-point sort.
Indicates whether the terms is of floating-point rounding mode sort.
Indicates whether the term is a floating-point numeral
Indicates whether the term is a floating-point rounding mode numeral
Indicates whether the term is the floating-point rounding numeral roundNearestTiesToEven
Indicates whether the term is the floating-point rounding numeral roundNearestTiesToAway
Indicates whether the term is the floating-point rounding numeral roundTowardNegative
Indicates whether the term is the floating-point rounding numeral roundTowardPositive
Indicates whether the term is the floating-point rounding numeral roundTowardZero
Indicates whether the term is the floating-point rounding numeral roundNearestTiesToEven
Indicates whether the term is the floating-point rounding numeral roundNearestTiesToAway
Indicates whether the term is the floating-point rounding numeral roundTowardNegative
Indicates whether the term is the floating-point rounding numeral roundTowardPositive
Indicates whether the term is the floating-point rounding numeral roundTowardZero
Indicates whether the term is a floating-point rounding mode numeral
Indicates whether the term is a floating-point +oo
Indicates whether the term is a floating-point -oo
Indicates whether the term is a floating-point NaN
Indicates whether the term is a floating-point +zero
Indicates whether the term is a floating-point -zero
Indicates whether the term is a floating-point addition term
Indicates whether the term is a floating-point subtraction term
Indicates whether the term is a floating-point negation term
Indicates whether the term is a floating-point multiplication term
Indicates whether the term is a floating-point divison term
Indicates whether the term is a floating-point remainder term
Indicates whether the term is a floating-point term absolute value term
Indicates whether the term is a floating-point minimum term
Indicates whether the term is a floating-point maximum term
Indicates whether the term is a floating-point fused multiply-add term
Indicates whether the term is a floating-point square root term
Indicates whether the term is a floating-point roundToIntegral term
Indicates whether the term is a floating-point equality term
Indicates whether the term is a floating-point less-than term
Indicates whether the term is a floating-point greater-than term
Indicates whether the term is a floating-point less-than or equal term
Indicates whether the term is a floating-point greater-than or erqual term
Indicates whether the term is a floating-point isNaN predicate term
Indicates whether the term is a floating-point isInf predicate term
Indicates whether the term is a floating-point isZero predicate term
Indicates whether the term is a floating-point isNormal term
Indicates whether the term is a floating-point isSubnormal predicate term
Indicates whether the term is a floating-point isNegative predicate term
Indicates whether the term is a floating-point isPositive predicate term
Indicates whether the term is a floating-point constructor term
Indicates whether the term is a floating-point conversion term
Indicates whether the term is a floating-point conversion from unsigned bit-vector term
Indicates whether the term is a floating-point conversion to unsigned bit-vector term
Indicates whether the term is a floating-point conversion to signed bit-vector term
Indicates whether the term is a floating-point conversion to real term
Indicates whether the term is a floating-point conversion to IEEE-754 bit-vector term
The de-Burijn index of a bound variable.
Bound variables are indexed by de-Bruijn indices. It is perhaps easiest to explain
the meaning of de-Bruijn indices by indicating the compilation process from
non-de-Bruijn formulas to de-Bruijn format.
abs(forall (x1) phi) = forall (x1) abs1(phi, x1, 0)
abs(forall (x1, x2) phi) = abs(forall (x1) abs(forall (x2) phi))
abs1(x, x, n) = b_n
abs1(y, x, n) = y
abs1(f(t1,...,tn), x, n) = f(abs1(t1,x,n), ..., abs1(tn,x,n))
abs1(forall (x1) phi, x, n) = forall (x1) (abs1(phi, x, n+1))
The last line is significant: the index of a bound variable is different depending
on the scope in which it appears. The deeper x appears, the higher is its
index.
Constructor for ArithExpr
Operator overloading for arithmetical divsion operator (over reals)
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Operator overloading for arithmetical operator
Return a upper bound for a given real algebraic number.
The interval isolating the number is smaller than 1/10^.
the precision of the result
A numeral Expr of sort Real
Return a lower bound for the given real algebraic number.
The interval isolating the number is smaller than 1/10^.
A numeral Expr of sort Real
Returns a string representation in decimal notation.
The result has at most decimal places.
ApplyResult objects represent the result of an application of a
tactic to a goal. It contains the subgoals that were produced.
Convert a model for the subgoal into a model for the original
goal g, that the ApplyResult was obtained from.
A model for g
A string representation of the ApplyResult.
The number of Subgoals.
Retrieves the subgoals from the ApplyResult.
An arithmetic sort, i.e., Int or Real.
The Sort class implements type information for ASTs.
Comparison operator.
A Sort
A Sort
True if and are from the same context
and represent the same sort; false otherwise.
Comparison operator.
A Sort
A Sort
True if and are not from the same context
or represent different sorts; false otherwise.
Equality operator for objects of type Sort.
Hash code generation for Sorts
A hash code
A string representation of the sort.
Sort constructor
Returns a unique identifier for the sort.
The kind of the sort.
The name of the sort
Array expressions
Constructor for ArrayExpr
Array sorts.
The domain of the array sort.
The range of the array sort.
Map from AST to AST
Checks whether the map contains the key .
An AST
True if is a key in the map, false otherwise.
Finds the value associated with the key .
This function signs an error when is not a key in the map.
An AST
Stores or replaces a new key/value pair in the map.
The key AST
The value AST
Erases the key from the map.
An AST
Removes all keys from the map.
Retrieves a string representation of the map.
The size of the map
The keys stored in the map.
Vectors of ASTs.
Resize the vector to .
The new size of the vector.
Add the AST to the back of the vector. The size
is increased by 1.
An AST
Translates all ASTs in the vector to .
A context
A new ASTVector
Retrieves a string representation of the vector.
Translates an AST vector into an AST[]
Translates an ASTVector into an Expr[]
Translates an ASTVector into a BoolExpr[]
Translates an ASTVector into a BitVecExpr[]
Translates an ASTVector into a ArithExpr[]
Translates an ASTVector into a ArrayExpr[]
Translates an ASTVector into a DatatypeExpr[]
Translates an ASTVector into a FPExpr[]
Translates an ASTVector into a FPRMExpr[]
Translates an ASTVector into a IntExpr[]
Translates an ASTVector into a RealExpr[]
The size of the vector
Retrieves the i-th object in the vector.
May throw an IndexOutOfBoundsException when is out of range.
Index
An AST
Bit-vector expressions
Constructor for BitVecExpr
The size of the sort of a bit-vector term.
Bit-vector numerals
Returns a string representation of the numeral.
Retrieve the 64-bit unsigned integer value.
Retrieve the int value.
Retrieve the 64-bit int value.
Retrieve the int value.
Retrieve the BigInteger value.
Bit-vector sorts.
The size of the bit-vector sort.
Boolean expressions
Constructor for BoolExpr
Disjunction of Boolean expressions
Conjunction of Boolean expressions
Xor of Boolean expressions
Negation
A Boolean sort.
Constructors are used for datatype sorts.
Destructor.
The number of fields of the constructor.
The function declaration of the constructor.
The function declaration of the tester.
The function declarations of the accessors
Lists of constructors
Destructor.
The main interaction with Z3 happens via the Context.
Constructor.
Constructor.
The following parameters can be set:
- proof (Boolean) Enable proof generation
- debug_ref_count (Boolean) Enable debug support for Z3_ast reference counting
- trace (Boolean) Tracing support for VCC
- trace_file_name (String) Trace out file for VCC traces
- timeout (unsigned) default timeout (in milliseconds) used for solvers
- well_sorted_check type checker
- auto_config use heuristics to automatically select solver and configure it
- model model generation for solvers, this parameter can be overwritten when creating a solver
- model_validate validate models produced by solvers
- unsat_core unsat-core generation for solvers, this parameter can be overwritten when creating a solver
Note that in previous versions of Z3, this constructor was also used to set global and module parameters.
For this purpose we should now use
Creates a new symbol using an integer.
Not all integers can be passed to this function.
The legal range of unsigned integers is 0 to 2^30-1.
Create a symbol using a string.
Create an array of symbols.
Create a new Boolean sort.
Create a new uninterpreted sort.
Create a new uninterpreted sort.
Create a new integer sort.
Create a real sort.
Create a new bit-vector sort.
Create a new sequence sort.
Create a new regular expression sort.
Create a new array sort.
Create a new tuple sort.
Create a new enumeration sort.
Create a new enumeration sort.
Create a new list sort.
Create a new list sort.
Create a new finite domain sort.
The result is a sort
The name used to identify the sort
The size of the sort
Create a new finite domain sort.
The result is a sort
Elements of the sort are created using ,
and the elements range from 0 to size-1.
The name used to identify the sort
The size of the sort
Create a datatype constructor.
constructor name
name of recognizer function.
names of the constructor fields.
field sorts, 0 if the field sort refers to a recursive sort.
reference to datatype sort that is an argument to the constructor;
if the corresponding sort reference is 0, then the value in sort_refs should be an index
referring to one of the recursive datatypes that is declared.
Create a datatype constructor.
Create a new datatype sort.
Create a new datatype sort.
Create mutually recursive datatypes.
names of datatype sorts
list of constructors, one list per sort.
Create mutually recursive data-types.
Update a datatype field at expression t with value v.
The function performs a record update at t. The field
that is passed in as argument is updated with value v,
the remainig fields of t are unchanged.
Creates a new function declaration.
Creates a new function declaration.
Creates a new function declaration.
Creates a new function declaration.
Creates a fresh function declaration with a name prefixed with .
Creates a new constant function declaration.
Creates a new constant function declaration.
Creates a fresh constant function declaration with a name prefixed with .
Creates a new bound variable.
The de-Bruijn index of the variable
The sort of the variable
Create a quantifier pattern.
Creates a new Constant of sort and named .
Creates a new Constant of sort and named .
Creates a fresh Constant of sort and a
name prefixed with .
Creates a fresh constant from the FuncDecl .
A decl of a 0-arity function
Create a Boolean constant.
Create a Boolean constant.
Creates an integer constant.
Creates an integer constant.
Creates a real constant.
Creates a real constant.
Creates a bit-vector constant.
Creates a bit-vector constant.
Create a new function application.
Create a new function application.
The true Term.
The false Term.
Creates a Boolean value.
Creates the equality = .
Creates a distinct term.
Mk an expression representing not(a).
Create an expression representing an if-then-else: ite(t1, t2, t3).
An expression with Boolean sort
An expression
An expression with the same sort as
Create an expression representing t1 iff t2.
Create an expression representing t1 -> t2.
Create an expression representing t1 xor t2.
Create an expression representing t[0] and t[1] and ....
Create an expression representing t[0] and t[1] and ....
Create an expression representing t[0] or t[1] or ....
Create an expression representing t[0] or t[1] or ....
Create an expression representing t[0] + t[1] + ....
Create an expression representing t[0] + t[1] + ....
Create an expression representing t[0] * t[1] * ....
Create an expression representing t[0] * t[1] * ....
Create an expression representing t[0] - t[1] - ....
Create an expression representing -t.
Create an expression representing t1 / t2.
Create an expression representing t1 mod t2.
The arguments must have int type.
Create an expression representing t1 rem t2.
The arguments must have int type.
Create an expression representing t1 ^ t2.
Create an expression representing t1 < t2
Create an expression representing t1 <= t2
Create an expression representing t1 > t2
Create an expression representing t1 >= t2
Coerce an integer to a real.
There is also a converse operation exposed. It follows the semantics prescribed by the SMT-LIB standard.
You can take the floor of a real by creating an auxiliary integer Term k and
and asserting MakeInt2Real(k) <= t1 < MkInt2Real(k)+1.
The argument must be of integer sort.
Coerce a real to an integer.
The semantics of this function follows the SMT-LIB standard for the function to_int.
The argument must be of real sort.
Creates an expression that checks whether a real number is an integer.
Bitwise negation.
The argument must have a bit-vector sort.
Take conjunction of bits in a vector, return vector of length 1.
The argument must have a bit-vector sort.
Take disjunction of bits in a vector, return vector of length 1.
The argument must have a bit-vector sort.
Bitwise conjunction.
The arguments must have a bit-vector sort.
Bitwise disjunction.
The arguments must have a bit-vector sort.
Bitwise XOR.
The arguments must have a bit-vector sort.
Bitwise NAND.
The arguments must have a bit-vector sort.
Bitwise NOR.
The arguments must have a bit-vector sort.
Bitwise XNOR.
The arguments must have a bit-vector sort.
Standard two's complement unary minus.
The arguments must have a bit-vector sort.
Two's complement addition.
The arguments must have the same bit-vector sort.
Two's complement subtraction.
The arguments must have the same bit-vector sort.
Two's complement multiplication.
The arguments must have the same bit-vector sort.
Unsigned division.
It is defined as the floor of t1/t2 if \c t2 is
different from zero. If t2 is zero, then the result
is undefined.
The arguments must have the same bit-vector sort.
Signed division.
It is defined in the following way:
- The \c floor of t1/t2 if \c t2 is different from zero, and t1*t2 >= 0.
- The \c ceiling of t1/t2 if \c t2 is different from zero, and t1*t2 < 0.
If t2 is zero, then the result is undefined.
The arguments must have the same bit-vector sort.
Unsigned remainder.
It is defined as t1 - (t1 /u t2) * t2, where /u represents unsigned division.
If t2 is zero, then the result is undefined.
The arguments must have the same bit-vector sort.
Signed remainder.
It is defined as t1 - (t1 /s t2) * t2, where /s represents signed division.
The most significant bit (sign) of the result is equal to the most significant bit of \c t1.
If t2 is zero, then the result is undefined.
The arguments must have the same bit-vector sort.
Two's complement signed remainder (sign follows divisor).
If t2 is zero, then the result is undefined.
The arguments must have the same bit-vector sort.
Unsigned less-than
The arguments must have the same bit-vector sort.
Two's complement signed less-than
The arguments must have the same bit-vector sort.
Unsigned less-than or equal to.
The arguments must have the same bit-vector sort.
Two's complement signed less-than or equal to.
The arguments must have the same bit-vector sort.
Unsigned greater than or equal to.
The arguments must have the same bit-vector sort.
Two's complement signed greater than or equal to.
The arguments must have the same bit-vector sort.
Unsigned greater-than.
The arguments must have the same bit-vector sort.
Two's complement signed greater-than.
The arguments must have the same bit-vector sort.
Bit-vector concatenation.
The arguments must have a bit-vector sort.
The result is a bit-vector of size n1+n2, where n1 (n2)
is the size of t1 (t2).
Bit-vector extraction.
Extract the bits down to from a bitvector of
size m to yield a new bitvector of size n, where
n = high - low + 1.
The argument must have a bit-vector sort.
Bit-vector sign extension.
Sign-extends the given bit-vector to the (signed) equivalent bitvector of
size m+i, where \c m is the size of the given bit-vector.
The argument must have a bit-vector sort.
Bit-vector zero extension.
Extend the given bit-vector with zeros to the (unsigned) equivalent
bitvector of size m+i, where \c m is the size of the
given bit-vector.
The argument must have a bit-vector sort.
Bit-vector repetition.
The argument must have a bit-vector sort.
Shift left.
It is equivalent to multiplication by 2^x where \c x is the value of .
NB. The semantics of shift operations varies between environments. This
definition does not necessarily capture directly the semantics of the
programming language or assembly architecture you are modeling.
The arguments must have a bit-vector sort.
Logical shift right
It is equivalent to unsigned division by 2^x where \c x is the value of .
NB. The semantics of shift operations varies between environments. This
definition does not necessarily capture directly the semantics of the
programming language or assembly architecture you are modeling.
The arguments must have a bit-vector sort.
Arithmetic shift right
It is like logical shift right except that the most significant
bits of the result always copy the most significant bit of the
second argument.
NB. The semantics of shift operations varies between environments. This
definition does not necessarily capture directly the semantics of the
programming language or assembly architecture you are modeling.
The arguments must have a bit-vector sort.
Rotate Left.
Rotate bits of \c t to the left \c i times.
The argument must have a bit-vector sort.
Rotate Right.
Rotate bits of \c t to the right \c i times.
The argument must have a bit-vector sort.
Rotate Left.
Rotate bits of to the left times.
The arguments must have the same bit-vector sort.
Rotate Right.
Rotate bits of to the right times.
The arguments must have the same bit-vector sort.
Create an bit bit-vector from the integer argument .
NB. This function is essentially treated as uninterpreted.
So you cannot expect Z3 to precisely reflect the semantics of this function
when solving constraints with this function.
The argument must be of integer sort.
Create an integer from the bit-vector argument .
If \c is_signed is false, then the bit-vector \c t1 is treated as unsigned.
So the result is non-negative and in the range [0..2^N-1], where
N are the number of bits in .
If \c is_signed is true, \c t1 is treated as a signed bit-vector.
NB. This function is essentially treated as uninterpreted.
So you cannot expect Z3 to precisely reflect the semantics of this function
when solving constraints with this function.
The argument must be of bit-vector sort.
Create a predicate that checks that the bit-wise addition does not overflow.
The arguments must be of bit-vector sort.
Create a predicate that checks that the bit-wise addition does not underflow.
The arguments must be of bit-vector sort.
Create a predicate that checks that the bit-wise subtraction does not overflow.
The arguments must be of bit-vector sort.
Create a predicate that checks that the bit-wise subtraction does not underflow.
The arguments must be of bit-vector sort.
Create a predicate that checks that the bit-wise signed division does not overflow.
The arguments must be of bit-vector sort.
Create a predicate that checks that the bit-wise negation does not overflow.
The arguments must be of bit-vector sort.
Create a predicate that checks that the bit-wise multiplication does not overflow.
The arguments must be of bit-vector sort.
Create a predicate that checks that the bit-wise multiplication does not underflow.
The arguments must be of bit-vector sort.
Create an array constant.
Create an array constant.
Array read.
The argument a is the array and i is the index
of the array that gets read.
The node a must have an array sort [domain -> range],
and i must have the sort domain.
The sort of the result is range.
Array update.
The node a must have an array sort [domain -> range],
i must have sort domain,
v must have sort range. The sort of the result is [domain -> range].
The semantics of this function is given by the theory of arrays described in the SMT-LIB
standard. See http://smtlib.org for more details.
The result of this function is an array that is equal to a
(with respect to select)
on all indices except for i, where it maps to v
(and the select of a with
respect to i may be a different value).
Create a constant array.
The resulting term is an array, such that a selecton an arbitrary index
produces the value v.
Maps f on the argument arrays.
Eeach element of args must be of an array sort [domain_i -> range_i].
The function declaration f must have type range_1 .. range_n -> range.
v must have sort range. The sort of the result is [domain_i -> range].
Access the array default value.
Produces the default range value, for arrays that can be represented as
finite maps with a default range value.
Create Extentionality index. Two arrays are equal if and only if they are equal on the index returned by MkArrayExt.
Create a set type.
Create an empty set.
Create the full set.
Add an element to the set.
Remove an element from a set.
Take the union of a list of sets.
Take the intersection of a list of sets.
Take the difference between two sets.
Take the complement of a set.
Check for set membership.
Check for subsetness of sets.
Create the empty sequence.
Create the singleton sequence.
Create a string constant.
Concatentate sequences.
Retrieve the length of a given sequence.
Check for sequence prefix.
Check for sequence suffix.
Check for sequence containment of s2 in s1.
Retrieve sequence of length one at index.
Extract subsequence.
Extract index of sub-string starting at offset.
Replace the first occurrence of src by dst in s.
Convert a regular expression that accepts sequence s.
Check for regular expression membership.
Take the Kleene star of a regular expression.
Take the Kleene plus of a regular expression.
Create the optional regular expression.
Create the concatenation of regular languages.
Create the union of regular languages.
Create an at-most-k constraint.
Create a pseudo-Boolean less-or-equal constraint.
Create a pseudo-Boolean equal constraint.
Create a Term of a given sort.
A string representing the Term value in decimal notation. If the given sort is a real, then the Term can be a rational, that is, a string of the form [num]* / [num]*.
The sort of the numeral. In the current implementation, the given sort can be an int, real, or bit-vectors of arbitrary size.
A Term with value and sort
Create a Term of a given sort. This function can be use to create numerals that fit in a machine integer.
It is slightly faster than MakeNumeral since it is not necessary to parse a string.
Value of the numeral
Sort of the numeral
A Term with value and type
Create a Term of a given sort. This function can be use to create numerals that fit in a machine integer.
It is slightly faster than MakeNumeral since it is not necessary to parse a string.
Value of the numeral
Sort of the numeral
A Term with value and type
Create a Term of a given sort. This function can be use to create numerals that fit in a machine integer.
It is slightly faster than MakeNumeral since it is not necessary to parse a string.
Value of the numeral
Sort of the numeral
A Term with value and type
Create a Term of a given sort. This function can be use to create numerals that fit in a machine integer.
It is slightly faster than MakeNumeral since it is not necessary to parse a string.
Value of the numeral
Sort of the numeral
A Term with value and type
Create a real from a fraction.
numerator of rational.
denominator of rational.
A Term with value / and sort Real
Create a real numeral.
A string representing the Term value in decimal notation.
A Term with value and sort Real
Create a real numeral.
value of the numeral.
A Term with value and sort Real
Create a real numeral.
value of the numeral.
A Term with value and sort Real
Create a real numeral.
value of the numeral.
A Term with value and sort Real
Create a real numeral.
value of the numeral.
A Term with value and sort Real
Create an integer numeral.
A string representing the Term value in decimal notation.
Create an integer numeral.
value of the numeral.
A Term with value and sort Integer
Create an integer numeral.
value of the numeral.
A Term with value and sort Integer
Create an integer numeral.
value of the numeral.
A Term with value and sort Integer
Create an integer numeral.
value of the numeral.
A Term with value and sort Integer
Create a bit-vector numeral.
A string representing the value in decimal notation.
the size of the bit-vector
Create a bit-vector numeral.
value of the numeral.
the size of the bit-vector
Create a bit-vector numeral.
value of the numeral.
the size of the bit-vector
Create a bit-vector numeral.
value of the numeral.
the size of the bit-vector
Create a bit-vector numeral.
value of the numeral.
the size of the bit-vector
Create a universal Quantifier.
Creates a forall formula, where is the weight,
is an array of patterns, is an array
with the sorts of the bound variables, is an array with the
'names' of the bound variables, and is the body of the
quantifier. Quantifiers are associated with weights indicating the importance of
using the quantifier during instantiation.
Note that the bound variables are de-Bruijn indices created using .
Z3 applies the convention that the last element in and
refers to the variable with index 0, the second to last element
of and refers to the variable
with index 1, etc.
the sorts of the bound variables.
names of the bound variables
the body of the quantifier.
quantifiers are associated with weights indicating the importance of using the quantifier during instantiation. By default, pass the weight 0.
array containing the patterns created using MkPattern.
array containing the anti-patterns created using MkPattern.
optional symbol to track quantifier.
optional symbol to track skolem constants.
Create a universal Quantifier.
Creates a universal quantifier using a list of constants that will
form the set of bound variables.
Create an existential Quantifier.
Creates an existential quantifier using de-Brujin indexed variables.
().
Create an existential Quantifier.
Creates an existential quantifier using a list of constants that will
form the set of bound variables.
Create a Quantifier.
Create a Quantifier.
Convert a benchmark into an SMT-LIB formatted string.
Name of the benchmark. The argument is optional.
The benchmark logic.
The status string (sat, unsat, or unknown)
Other attributes, such as source, difficulty or category.
Auxiliary assumptions.
Formula to be checked for consistency in conjunction with assumptions.
A string representation of the benchmark.
Parse the given string using the SMT-LIB parser.
The symbol table of the parser can be initialized using the given sorts and declarations.
The symbols in the arrays and
don't need to match the names of the sorts and declarations in the arrays
and . This is a useful feature since we can use arbitrary names to
reference sorts and declarations.
Parse the given file using the SMT-LIB parser.
Parse the given string using the SMT-LIB2 parser.
A conjunction of assertions in the scope (up to push/pop) at the end of the string.
Parse the given file using the SMT-LIB2 parser.
Creates a new Goal.
Note that the Context must have been created with proof generation support if
is set to true here.
Indicates whether model generation should be enabled.
Indicates whether unsat core generation should be enabled.
Indicates whether proof generation should be enabled.
Creates a new ParameterSet.
Returns a string containing a description of the tactic with the given name.
Creates a new Tactic.
Create a tactic that applies to a Goal and
then to every subgoal produced by .
Create a tactic that applies to a Goal and
then to every subgoal produced by .
Shorthand for AndThen.
Create a tactic that first applies to a Goal and
if it fails then returns the result of applied to the Goal.
Create a tactic that applies to a goal for milliseconds.
If does not terminate within milliseconds, then it fails.
Create a tactic that applies to a given goal if the probe
evaluates to true.
If evaluates to false, then the new tactic behaves like the skip tactic.
Create a tactic that applies to a given goal if the probe
evaluates to true and otherwise.
Create a tactic that keeps applying until the goal is not
modified anymore or the maximum number of iterations is reached.
Create a tactic that just returns the given goal.
Create a tactic always fails.
Create a tactic that fails if the probe evaluates to false.
Create a tactic that fails if the goal is not triviall satisfiable (i.e., empty)
or trivially unsatisfiable (i.e., contains `false').
Create a tactic that applies using the given set of parameters .
Create a tactic that applies using the given set of parameters .
Alias for UsingParams
Create a tactic that applies the given tactics in parallel until one of them succeeds (i.e., the first that doesn't fail).
Create a tactic that applies to a given goal and then
to every subgoal produced by . The subgoals are processed in parallel.
Interrupt the execution of a Z3 procedure.
This procedure can be used to interrupt: solvers, simplifiers and tactics.
Returns a string containing a description of the probe with the given name.
Creates a new Probe.
Create a probe that always evaluates to .
Create a probe that evaluates to "true" when the value returned by
is less than the value returned by
Create a probe that evaluates to "true" when the value returned by
is greater than the value returned by
Create a probe that evaluates to "true" when the value returned by
is less than or equal the value returned by
Create a probe that evaluates to "true" when the value returned by
is greater than or equal the value returned by
Create a probe that evaluates to "true" when the value returned by
is equal to the value returned by
Create a probe that evaluates to "true" when the value
and evaluate to "true".
Create a probe that evaluates to "true" when the value
or evaluate to "true".
Create a probe that evaluates to "true" when the value
does not evaluate to "true".
Creates a new (incremental) solver.
This solver also uses a set of builtin tactics for handling the first
check-sat command, and check-sat commands that take more than a given
number of milliseconds to be solved.
Creates a new (incremental) solver.
Creates a new (incremental) solver.
Creates a solver that is implemented using the given tactic.
The solver supports the commands Push and Pop, but it
will always solve each check from scratch.
Create a Fixedpoint context.
Create an Optimization context.
Create the floating-point RoundingMode sort.
Create a numeral of RoundingMode sort which represents the NearestTiesToEven rounding mode.
Create a numeral of RoundingMode sort which represents the NearestTiesToEven rounding mode.
Create a numeral of RoundingMode sort which represents the NearestTiesToAway rounding mode.
Create a numeral of RoundingMode sort which represents the NearestTiesToAway rounding mode.
Create a numeral of RoundingMode sort which represents the RoundTowardPositive rounding mode.
Create a numeral of RoundingMode sort which represents the RoundTowardPositive rounding mode.
Create a numeral of RoundingMode sort which represents the RoundTowardNegative rounding mode.
Create a numeral of RoundingMode sort which represents the RoundTowardNegative rounding mode.
Create a numeral of RoundingMode sort which represents the RoundTowardZero rounding mode.
Create a numeral of RoundingMode sort which represents the RoundTowardZero rounding mode.
Create a FloatingPoint sort.
exponent bits in the FloatingPoint sort.
significand bits in the FloatingPoint sort.
Create the half-precision (16-bit) FloatingPoint sort.
Create the half-precision (16-bit) FloatingPoint sort.
Create the single-precision (32-bit) FloatingPoint sort.
Create the single-precision (32-bit) FloatingPoint sort.
Create the double-precision (64-bit) FloatingPoint sort.
Create the double-precision (64-bit) FloatingPoint sort.
Create the quadruple-precision (128-bit) FloatingPoint sort.
Create the quadruple-precision (128-bit) FloatingPoint sort.
Create a NaN of sort s.
FloatingPoint sort.
Create a floating-point infinity of sort s.
FloatingPoint sort.
indicates whether the result should be negative.
Create a floating-point zero of sort s.
FloatingPoint sort.
indicates whether the result should be negative.
Create a numeral of FloatingPoint sort from a float.
numeral value.
FloatingPoint sort.
Create a numeral of FloatingPoint sort from a float.
numeral value.
FloatingPoint sort.
Create a numeral of FloatingPoint sort from an int.
numeral value.
FloatingPoint sort.
Create a numeral of FloatingPoint sort from a sign bit and two integers.
the sign.
the significand.
the exponent.
FloatingPoint sort.
Create a numeral of FloatingPoint sort from a sign bit and two 64-bit integers.
the sign.
the significand.
the exponent.
FloatingPoint sort.
Create a numeral of FloatingPoint sort from a float.
numeral value.
FloatingPoint sort.
Create a numeral of FloatingPoint sort from a float.
numeral value.
FloatingPoint sort.
Create a numeral of FloatingPoint sort from an int.
numeral value.
FloatingPoint sort.
Create a numeral of FloatingPoint sort from a sign bit and two integers.
the sign.
the exponent.
the significand.
FloatingPoint sort.
Create a numeral of FloatingPoint sort from a sign bit and two 64-bit integers.
the sign.
the exponent.
the significand.
FloatingPoint sort.
Floating-point absolute value
floating-point term
Floating-point negation
floating-point term
Floating-point addition
rounding mode term
floating-point term
floating-point term
Floating-point subtraction
rounding mode term
floating-point term
floating-point term
Floating-point multiplication
rounding mode term
floating-point term
floating-point term
Floating-point division
rounding mode term
floating-point term
floating-point term
Floating-point fused multiply-add
The result is round((t1 * t2) + t3)
rounding mode term
floating-point term
floating-point term
floating-point term
Floating-point square root
rounding mode term
floating-point term
Floating-point remainder
floating-point term
floating-point term
Floating-point roundToIntegral. Rounds a floating-point number to
the closest integer, again represented as a floating-point number.
term of RoundingMode sort
floating-point term
Minimum of floating-point numbers.
floating-point term
floating-point term
Maximum of floating-point numbers.
floating-point term
floating-point term
Floating-point less than or equal.
floating-point term
floating-point term
Floating-point less than.
floating-point term
floating-point term
Floating-point greater than or equal.
floating-point term
floating-point term
Floating-point greater than.
floating-point term
floating-point term
Floating-point equality.
Note that this is IEEE 754 equality (as opposed to standard =).
floating-point term
floating-point term
Predicate indicating whether t is a normal floating-point number.
floating-point term
Predicate indicating whether t is a subnormal floating-point number.
floating-point term
Predicate indicating whether t is a floating-point number with zero value, i.e., +0 or -0.
floating-point term
Predicate indicating whether t is a floating-point number representing +oo or -oo.
floating-point term
Predicate indicating whether t is a NaN.
floating-point term
Predicate indicating whether t is a negative floating-point number.
floating-point term
Predicate indicating whether t is a positive floating-point number.
floating-point term
Create an expression of FloatingPoint sort from three bit-vector expressions.
This is the operator named `fp' in the SMT FP theory definition.
Note that sgn is required to be a bit-vector of size 1. Significand and exponent
are required to be greater than 1 and 2 respectively. The FloatingPoint sort
of the resulting expression is automatically determined from the bit-vector sizes
of the arguments.
bit-vector term (of size 1) representing the sign.
bit-vector term representing the significand.
bit-vector term representing the exponent.
Conversion of a single IEEE 754-2008 bit-vector into a floating-point number.
Produces a term that represents the conversion of a bit-vector term bv to a
floating-point term of sort s. The bit-vector size of bv (m) must be equal
to ebits+sbits of s. The format of the bit-vector is as defined by the
IEEE 754-2008 interchange format.
bit-vector value (of size m).
FloatingPoint sort (ebits+sbits == m)
Conversion of a FloatingPoint term into another term of different FloatingPoint sort.
Produces a term that represents the conversion of a floating-point term t to a
floating-point term of sort s. If necessary, the result will be rounded according
to rounding mode rm.
RoundingMode term.
FloatingPoint term.
FloatingPoint sort.
Conversion of a term of real sort into a term of FloatingPoint sort.
Produces a term that represents the conversion of term t of real sort into a
floating-point term of sort s. If necessary, the result will be rounded according
to rounding mode rm.
RoundingMode term.
term of Real sort.
FloatingPoint sort.
Conversion of a 2's complement signed bit-vector term into a term of FloatingPoint sort.
Produces a term that represents the conversion of the bit-vector term t into a
floating-point term of sort s. The bit-vector t is taken to be in signed
2's complement format (when signed==true, otherwise unsigned). If necessary, the
result will be rounded according to rounding mode rm.
RoundingMode term.
term of bit-vector sort.
FloatingPoint sort.
flag indicating whether t is interpreted as signed or unsigned bit-vector.
Conversion of a floating-point number to another FloatingPoint sort s.
Produces a term that represents the conversion of a floating-point term t to a different
FloatingPoint sort s. If necessary, rounding according to rm is applied.
FloatingPoint sort
floating-point rounding mode term
floating-point term
Conversion of a floating-point term into a bit-vector.
Produces a term that represents the conversion of the floating-poiunt term t into a
bit-vector term of size sz in 2's complement format (signed when signed==true). If necessary,
the result will be rounded according to rounding mode rm.
RoundingMode term.
FloatingPoint term
Size of the resulting bit-vector.
Indicates whether the result is a signed or unsigned bit-vector.
Conversion of a floating-point term into a real-numbered term.
Produces a term that represents the conversion of the floating-poiunt term t into a
real number. Note that this type of conversion will often result in non-linear
constraints over real terms.
FloatingPoint term
Conversion of a floating-point term into a bit-vector term in IEEE 754-2008 format.
The size of the resulting bit-vector is automatically determined. Note that
IEEE 754-2008 allows multiple different representations of NaN. This conversion
knows only one NaN and it will always produce the same bit-vector represenatation of
that NaN.
FloatingPoint term.
Conversion of a real-sorted significand and an integer-sorted exponent into a term of FloatingPoint sort.
Produces a term that represents the conversion of sig * 2^exp into a
floating-point term of sort s. If necessary, the result will be rounded
according to rounding mode rm.
RoundingMode term.
Exponent term of Int sort.
Significand term of Real sort.
FloatingPoint sort.
Wraps an AST.
This function is used for transitions between native and
managed objects. Note that must be a
native object obtained from Z3 (e.g., through )
and that it must have a correct reference count (see e.g.,
.
The native pointer to wrap.
Unwraps an AST.
This function is used for transitions between native and
managed objects. It returns the native pointer to the AST. Note that
AST objects are reference counted and unwrapping an AST disables automatic
reference counting, i.e., all references to the IntPtr that is returned
must be handled externally and through native calls (see e.g.,
).
The AST to unwrap.
Return a string describing all available parameters to Expr.Simplify.
Update a mutable configuration parameter.
The list of all configuration parameters can be obtained using the Z3 executable:
z3.exe -p
Only a few configuration parameters are mutable once the context is created.
An exception is thrown when trying to modify an immutable parameter.
Finalizer.
Disposes of the context.
Retrieves the Boolean sort of the context.
Retrieves the Integer sort of the context.
Retrieves the Real sort of the context.
Retrieves the String sort of the context.
Selects the format used for pretty-printing expressions.
The default mode for pretty printing expressions is to produce
SMT-LIB style output where common subexpressions are printed
at each occurrence. The mode is called Z3_PRINT_SMTLIB_FULL.
To print shared common subexpressions only once,
use the Z3_PRINT_LOW_LEVEL mode.
To print in way that conforms to SMT-LIB standards and uses let
expressions to share common sub-expressions use Z3_PRINT_SMTLIB_COMPLIANT.
The number of SMTLIB formulas parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile.
The formulas parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile.
The number of SMTLIB assumptions parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile.
The assumptions parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile.
The number of SMTLIB declarations parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile.
The declarations parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile.
The number of SMTLIB sorts parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile.
The declarations parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile.
The number of supported tactics.
The names of all supported tactics.
The number of supported Probes.
The names of all supported Probes.
Retrieves parameter descriptions for simplifier.
AST DRQ
ASTMap DRQ
ASTVector DRQ
ApplyResult DRQ
FuncEntry DRQ
FuncInterp DRQ
Goal DRQ
Model DRQ
Params DRQ
ParamDescrs DRQ
Probe DRQ
Solver DRQ
Statistics DRQ
Tactic DRQ
FixedPoint DRQ
Optimize DRQ
Datatype expressions
Constructor for DatatypeExpr
Datatype sorts.
The number of constructors of the datatype sort.
The constructors.
The recognizers.
The constructor accessors.
The main interaction with Z3 happens via the Context.
Z3_lbool
Z3_symbol_kind
Z3_parameter_kind
Z3_sort_kind
Z3_ast_kind
Z3_decl_kind
Z3_param_kind
Z3_ast_print_mode
Z3_error_code
Z3_goal_prec
Enumeration sorts.
Retrieves the inx'th constant declaration in the enumeration.
Retrieves the inx'th constant in the enumeration.
Retrieves the inx'th tester/recognizer declaration in the enumeration.
The function declarations of the constants in the enumeration.
The constants in the enumeration.
The test predicates (recognizers) for the constants in the enumeration.
Finite-domain expressions
Constructor for DatatypeExpr
Finite-domain numerals
Returns a string representation of the numeral.
Retrieve the 64-bit unsigned integer value.
Retrieve the int value.
Retrieve the 64-bit int value.
Retrieve the int value.
Retrieve the BigInteger value.
Finite domain sorts.
The size of the finite domain sort.
Object for managing fixedpoints
Assert a constraint (or multiple) into the fixedpoint solver.
Alias for Assert.
Register predicate as recursive relation.
Add rule into the fixedpoint solver.
Add table fact to the fixedpoint solver.
Query the fixedpoint solver.
A query is a conjunction of constraints. The constraints may include the recursively defined relations.
The query is satisfiable if there is an instance of the query variables and a derivation for it.
The query is unsatisfiable if there are no derivations satisfying the query variables.
Query the fixedpoint solver.
A query is an array of relations.
The query is satisfiable if there is an instance of some relation that is non-empty.
The query is unsatisfiable if there are no derivations satisfying any of the relations.
Creates a backtracking point.
Backtrack one backtracking point.
Note that an exception is thrown if Pop is called without a corresponding Push
Update named rule into in the fixedpoint solver.
Retrieve satisfying instance or instances of solver,
or definitions for the recursive predicates that show unsatisfiability.
Retrieve explanation why fixedpoint engine returned status Unknown.
Retrieve the number of levels explored for a given predicate.
Retrieve the cover of a predicate.
Add property about the predicate.
The property is added at level.
Retrieve internal string representation of fixedpoint object.
Instrument the Datalog engine on which table representation to use for recursive predicate.
Convert benchmark given as set of axioms, rules and queries to a string.
Parse an SMT-LIB2 file with fixedpoint rules.
Add the rules to the current fixedpoint context.
Return the set of queries in the file.
Similar to ParseFile. Instead it takes as argument a string.
A string that describes all available fixedpoint solver parameters.
Sets the fixedpoint solver parameters.
Retrieves parameter descriptions for Fixedpoint solver.
Retrieve set of rules added to fixedpoint context.
Retrieve set of assertions added to fixedpoint context.
Fixedpoint statistics.
FloatingPoint Expressions
Constructor for FPExpr
The number of exponent bits.
The number of significand bits.
FloatiungPoint Numerals
Returns a string representation of the numeral.
Retrieves the sign of a floating-point literal
Remarks: returns true if the numeral is negative
The significand value of a floating-point numeral as a string
The significand s is always 0 < s < 2.0; the resulting string is long
enough to represent the real significand precisely.
The significand value of a floating-point numeral as a UInt64
This function extracts the significand bits, without the
hidden bit or normalization. Throws an exception if the
significand does not fit into a UInt64.
Return the exponent value of a floating-point numeral as a string
Return the exponent value of a floating-point numeral as a signed 64-bit integer
FloatingPoint RoundingMode Expressions
Constructor for FPRMExpr
Floating-point rounding mode numerals
Returns a string representation of the numeral.
Constructor for FPRMNum
Indicates whether the term is the floating-point rounding numeral roundNearestTiesToEven
Indicates whether the term is the floating-point rounding numeral roundNearestTiesToEven
Indicates whether the term is the floating-point rounding numeral roundNearestTiesToAway
Indicates whether the term is the floating-point rounding numeral roundNearestTiesToAway
Indicates whether the term is the floating-point rounding numeral roundTowardPositive
Indicates whether the term is the floating-point rounding numeral roundTowardPositive
Indicates whether the term is the floating-point rounding numeral roundTowardNegative
Indicates whether the term is the floating-point rounding numeral roundTowardNegative
Indicates whether the term is the floating-point rounding numeral roundTowardZero
Indicates whether the term is the floating-point rounding numeral roundTowardZero
The FloatingPoint RoundingMode sort
FloatingPoint sort
The number of exponent bits.
The number of significand bits.
Function declarations.
Comparison operator.
True if and share the same context and are equal, false otherwise.
Comparison operator.
True if and do not share the same context or are not equal, false otherwise.
Object comparison.
A hash code.
A string representations of the function declaration.
Create expression that applies function to arguments.
Returns a unique identifier for the function declaration.
The arity of the function declaration
The size of the domain of the function declaration
The domain of the function declaration
The range of the function declaration
The kind of the function declaration.
The name of the function declaration
The number of parameters of the function declaration
The parameters of the function declaration
Create expression that applies function to arguments.
Function declarations can have Parameters associated with them.
The int value of the parameter.
The double value of the parameter.
The Symbol value of the parameter.
The Sort value of the parameter.
The AST value of the parameter.
The FunctionDeclaration value of the parameter.
The rational string value of the parameter.
The kind of the parameter.
A function interpretation is represented as a finite map and an 'else' value.
Each entry in the finite map represents the value of a function given a set of arguments.
A string representation of the function interpretation.
The number of entries in the function interpretation.
The entries in the function interpretation
The (symbolic) `else' value of the function interpretation.
The arity of the function interpretation
An Entry object represents an element in the finite map used to encode
a function interpretation.
A string representation of the function entry.
Return the (symbolic) value of this entry.
The number of arguments of the entry.
The arguments of the function entry.
Global functions for Z3.
This (static) class contains functions that effect the behaviour of Z3
globally across contexts, etc.
Set a global (or module) parameter, which is shared by all Z3 contexts.
When a Z3 module is initialized it will use the value of these parameters
when Z3_params objects are not provided.
The name of parameter can be composed of characters [a-z][A-Z], digits [0-9], '-' and '_'.
The character '.' is a delimiter (more later).
The parameter names are case-insensitive. The character '-' should be viewed as an "alias" for '_'.
Thus, the following parameter names are considered equivalent: "pp.decimal-precision" and "PP.DECIMAL_PRECISION".
This function can be used to set parameters for a specific Z3 module.
This can be done by using [module-name].[parameter-name].
For example:
Z3_global_param_set('pp.decimal', 'true')
will set the parameter "decimal" in the module "pp" to true.
Get a global (or module) parameter.
Returns null if the parameter does not exist.
The caller must invoke #Z3_global_param_del_value to delete the value returned at \c param_value.
This function cannot be invoked simultaneously from different threads without synchronization.
The result string stored in param_value is stored in a shared location.
Restore the value of all global (and module) parameters.
This command will not affect already created objects (such as tactics and solvers)
Enable/disable printing of warning messages to the console.
Note that this function is static and effects the behaviour of
all contexts globally.
Enable tracing messages tagged as `tag' when Z3 is compiled in debug mode.
It is a NOOP otherwise.
trace tag
Disable tracing messages tagged as `tag' when Z3 is compiled in debug mode.
It is a NOOP otherwise.
trace tag
A goal (aka problem). A goal is essentially a set
of formulas, that can be solved and/or transformed using
tactics and solvers.
Adds the to the given goal.
Alias for Assert.
Erases all formulas from the given goal.
Translates (copies) the Goal to the target Context .
Simplifies the goal.
Essentially invokes the `simplify' tactic on the goal.
Goal to string conversion.
A string representation of the Goal.
Goal to BoolExpr conversion.
A string representation of the Goal.
The precision of the goal.
Goals can be transformed using over and under approximations.
An under approximation is applied when the objective is to find a model for a given goal.
An over approximation is applied when the objective is to find a proof for a given goal.
Indicates whether the goal is precise.
Indicates whether the goal is an under-approximation.
Indicates whether the goal is an over-approximation.
Indicates whether the goal is garbage (i.e., the product of over- and under-approximations).
Indicates whether the goal contains `false'.
The depth of the goal.
This tracks how many transformations were applied to it.
The number of formulas in the goal.
The formulas in the goal.
The number of formulas, subformulas and terms in the goal.
Indicates whether the goal is empty, and it is precise or the product of an under approximation.
Indicates whether the goal contains `false', and it is precise or the product of an over approximation.
The InterpolationContext is suitable for generation of interpolants.
For more information on interpolation please refer
too the C/C++ API, which is well documented.
Constructor.
Constructor.
Create an expression that marks a formula position for interpolation.
Computes an interpolant.
For more information on interpolation please refer
too the function Z3_get_interpolant in the C/C++ API, which is
well documented.
Computes an interpolant.
For more information on interpolation please refer
too the function Z3_compute_interpolant in the C/C++ API, which is
well documented.
Return a string summarizing cumulative time used for interpolation.
For more information on interpolation please refer
too the function Z3_interpolation_profile in the C/C++ API, which is
well documented.
Checks the correctness of an interpolant.
For more information on interpolation please refer
too the function Z3_check_interpolant in the C/C++ API, which is
well documented.
Reads an interpolation problem from a file.
For more information on interpolation please refer
too the function Z3_read_interpolation_problem in the C/C++ API, which is
well documented.
Writes an interpolation problem to a file.
For more information on interpolation please refer
too the function Z3_write_interpolation_problem in the C/C++ API, which is
well documented.
Int expressions
Constructor for IntExpr
Integer Numerals
Returns a string representation of the numeral.
Retrieve the 64-bit unsigned integer value.
Retrieve the int value.
Retrieve the 64-bit int value.
Retrieve the int value.
Retrieve the BigInteger value.
An Integer sort
Numbered symbols
Symbols are used to name several term and type constructors.
Indicates whether the symbol is of Int kind
Indicates whether the symbol is of string kind.
A string representation of the symbol.
Equality overloading.
Equality overloading.
Object comparison.
The Symbols's hash code.
A hash code
Symbol constructor
The kind of the symbol (int or string)
The int value of the symbol.
Throws an exception if the symbol is not of int kind.
List sorts.
The declaration of the nil function of this list sort.
The empty list.
The declaration of the isNil function of this list sort.
The declaration of the cons function of this list sort.
The declaration of the isCons function of this list sort.
The declaration of the head function of this list sort.
The declaration of the tail function of this list sort.
Interaction logging for Z3.
Note that this is a global, static log and if multiple Context
objects are created, it logs the interaction with all of them.
Open an interaction log file.
the name of the file to open
True if opening the log file succeeds, false otherwise.
Closes the interaction log.
Appends the user-provided string to the interaction log.
Checks whether the interaction log is opened.
True if the interaction log is open, false otherwise.
A Model contains interpretations (assignments) of constants and functions.
Retrieves the interpretation (the assignment) of in the model.
A Constant
An expression if the constant has an interpretation in the model, null otherwise.
Retrieves the interpretation (the assignment) of in the model.
A function declaration of zero arity
An expression if the function has an interpretation in the model, null otherwise.
Retrieves the interpretation (the assignment) of a non-constant in the model.
A function declaration of non-zero arity
A FunctionInterpretation if the function has an interpretation in the model, null otherwise.
Evaluates the expression in the current model.
This function may fail if contains quantifiers,
is partial (MODEL_PARTIAL enabled), or if is not well-sorted.
In this case a ModelEvaluationFailedException is thrown.
An expression
When this flag is enabled, a model value will be assigned to any constant
or function that does not have an interpretation in the model.
The evaluation of in the model.
Alias for Eval.
The finite set of distinct values that represent the interpretation for sort .
An uninterpreted sort
An array of expressions, where each is an element of the universe of
Conversion of models to strings.
A string representation of the model.
The number of constants that have an interpretation in the model.
The function declarations of the constants in the model.
The number of function interpretations in the model.
The function declarations of the function interpretations in the model.
All symbols that have an interpretation in the model.
The number of uninterpreted sorts that the model has an interpretation for.
The uninterpreted sorts that the model has an interpretation for.
Z3 also provides an intepretation for uninterpreted sorts used in a formula.
The interpretation for a sort is a finite set of distinct values. We say this finite set is
the "universe" of the sort.
A ModelEvaluationFailedException is thrown when an expression cannot be evaluated by the model.
The exception base class for error reporting from Z3
Constructor.
Constructor.
Constructor.
An exception that is thrown when model evaluation fails.
Object for managing optimizization context
Assert a constraint (or multiple) into the optimize solver.
Assert a constraint (or multiple) into the optimize solver.
Alias for Assert.
Alias for Assert.
Assert a constraint (or multiple) into the optimize solver.
Assert soft constraint
Return an objective which associates with the group of constraints.
Check satisfiability of asserted constraints.
Produce a model that (when the objectives are bounded and
don't use strict inequalities) meets the objectives.
Creates a backtracking point.
Backtrack one backtracking point.
Note that an exception is thrown if Pop is called without a corresponding Push
Declare an arithmetical maximization objective.
Return a handle to the objective. The handle is used as
to retrieve the values of objectives after calling Check.
Declare an arithmetical minimization objective.
Similar to MkMaximize.
Retrieve a lower bound for the objective handle.
Retrieve an upper bound for the objective handle.
Print the context to a string (SMT-LIB parseable benchmark).
Parse an SMT-LIB2 file with optimization objectives and constraints.
The parsed constraints and objectives are added to the optimization context.
Similar to FromFile. Instead it takes as argument a string.
A string that describes all available optimize solver parameters.
Sets the optimize solver parameters.
Retrieves parameter descriptions for Optimize solver.
The model of the last Check.
The result is null if Check was not invoked before,
if its results was not SATISFIABLE, or if model production is not enabled.
Return a string the describes why the last to check returned unknown
The set of asserted formulas.
The set of asserted formulas.
Optimize statistics.
Handle to objectives returned by objective functions.
Retrieve a lower bound for the objective handle.
Retrieve an upper bound for the objective handle.
Retrieve the value of an objective.
A ParamDescrs describes a set of parameters.
validate a set of parameters.
Retrieve kind of parameter.
Retrieve documentation of parameter.
Retrieves a string representation of the ParamDescrs.
Retrieve all names of parameters.
The size of the ParamDescrs.
A Params objects represents a configuration in the form of Symbol/value pairs.
Adds a parameter setting.
Adds a parameter setting.
Adds a parameter setting.
Adds a parameter setting.
Adds a parameter setting.
Adds a parameter setting.
Adds a parameter setting.
Adds a parameter setting.
Adds a parameter setting.
Adds a parameter setting.
A string representation of the parameter set.
Patterns comprise a list of terms. The list should be
non-empty. If the list comprises of more than one term, it is
also called a multi-pattern.
A string representation of the pattern.
The number of terms in the pattern.
The terms in the pattern.
Probes are used to inspect a goal (aka problem) and collect information that may be used to decide
which solver and/or preprocessing step will be used.
The complete list of probes may be obtained using the procedures Context.NumProbes
and Context.ProbeNames.
It may also be obtained using the command (help-tactic) in the SMT 2.0 front-end.
Execute the probe over the goal.
A probe always produce a double value.
"Boolean" probes return 0.0 for false, and a value different from 0.0 for true.
Apply the probe to a goal.
Quantifier expressions.
Indicates whether the quantifier is universal.
Indicates whether the quantifier is existential.
The weight of the quantifier.
The number of patterns.
The patterns.
The number of no-patterns.
The no-patterns.
The number of bound variables.
The symbols for the bound variables.
The sorts of the bound variables.
The body of the quantifier.
Rational Numerals
Real expressions
Constructor for RealExpr
Returns a string representation in decimal notation.
The result has at most decimal places.
Returns a string representation of the numeral.
The numerator of a rational numeral.
The denominator of a rational numeral.
Converts the numerator of the rational to a BigInteger
Converts the denominator of the rational to a BigInteger
A real sort
Regular expression expressions
Constructor for ReExpr
Relation sorts.
The arity of the relation sort.
The sorts of the columns of the relation sort.
A regular expression sort
Sequence expressions
Constructor for SeqExpr
A Sequence sort
Set sorts.
Solvers.
Creates a backtracking point.
Backtracks backtracking points.
Note that an exception is thrown if is not smaller than NumScopes
Resets the Solver.
This removes all assertions from the solver.
Assert a constraint (or multiple) into the solver.
Alias for Assert.
Assert multiple constraints into the solver, and track them (in the unsat) core
using the Boolean constants in ps.
This API is an alternative to with assumptions for extracting unsat cores.
Both APIs can be used in the same solver. The unsat core will contain a combination
of the Boolean variables provided using
and the Boolean literals
provided using with assumptions.
Assert a constraint into the solver, and track it (in the unsat) core
using the Boolean constant p.
This API is an alternative to with assumptions for extracting unsat cores.
Both APIs can be used in the same solver. The unsat core will contain a combination
of the Boolean variables provided using
and the Boolean literals
provided using with assumptions.
Checks whether the assertions in the solver are consistent or not.
Retrieve fixed assignments to the set of variables in the form of consequences.
Each consequence is an implication of the form
relevant-assumptions Implies variable = value
where the relevant assumptions is a subset of the assumptions that are passed in
and the equality on the right side of the implication indicates how a variable
is fixed.
Create a clone of the current solver with respect to ctx.
A string representation of the solver.
A string that describes all available solver parameters.
Sets the solver parameters.
Retrieves parameter descriptions for solver.
The current number of backtracking points (scopes).
The number of assertions in the solver.
The set of asserted formulas.
The model of the last Check.
The result is null if Check was not invoked before,
if its results was not SATISFIABLE, or if model production is not enabled.
The proof of the last Check.
The result is null if Check was not invoked before,
if its results was not UNSATISFIABLE, or if proof production is disabled.
The unsat core of the last Check.
The unsat core is a subset of Assertions
The result is empty if Check was not invoked before,
if its results was not UNSATISFIABLE, or if core production is disabled.
A brief justification of why the last call to Check returned UNKNOWN.
Solver statistics.
Objects of this class track statistical information about solvers.
A string representation of the statistical data.
The number of statistical data.
The data entries.
The statistical counters.
The value of a particular statistical counter.
Returns null if the key is unknown.
Statistical data is organized into pairs of [Key, Entry], where every
Entry is either a DoubleEntry or a UIntEntry
The key of the entry.
The string representation of the Entry.
The uint-value of the entry.
The double-value of the entry.
True if the entry is uint-valued.
True if the entry is double-valued.
The string representation of the the entry's value.
Status values.
Used to signify an unsatisfiable status.
Used to signify an unknown status.
Used to signify a satisfiable status.
Named symbols
The string value of the symbol.
Throws an exception if the symbol is not of string kind.
Tactics are the basic building block for creating custom solvers for specific problem domains.
The complete list of tactics may be obtained using Context.NumTactics
and Context.TacticNames.
It may also be obtained using the command (help-tactic) in the SMT 2.0 front-end.
Execute the tactic over the goal.
A string containing a description of parameters accepted by the tactic.
Retrieves parameter descriptions for Tactics.
Apply the tactic to a goal.
Creates a solver that is implemented using the given tactic.
DecRefQueue
Tuple sorts.
The constructor function of the tuple.
The number of fields in the tuple.
The field declarations.
Uninterpreted Sorts
Version information.
Note that this class is static.
A string representation of the version information.
The major version
The minor version
The build version
The revision
A full version string