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