|
| def | z3_debug () |
| |
| def | enable_trace (msg) |
| |
| def | disable_trace (msg) |
| |
| def | get_version_string () |
| |
| def | get_version () |
| |
| def | get_full_version () |
| |
| def | open_log (fname) |
| |
| def | append_log (s) |
| |
| def | to_symbol (s, ctx=None) |
| |
| def | z3_error_handler (c, e) |
| |
| def | main_ctx () |
| |
| def | get_ctx (ctx) |
| |
| def | set_param (*args, **kws) |
| |
| def | reset_params () |
| |
| def | set_option (*args, **kws) |
| |
| def | get_param (name) |
| |
| def | is_ast (a) |
| |
| def | eq (a, b) |
| |
| def | is_sort (s) |
| |
| def | DeclareSort (name, ctx=None) |
| |
| def | is_func_decl (a) |
| |
| def | Function (name, *sig) |
| |
| def | FreshFunction (*sig) |
| |
| def | RecFunction (name, *sig) |
| |
| def | RecAddDefinition (f, args, body) |
| |
| def | is_expr (a) |
| |
| def | is_app (a) |
| |
| def | is_const (a) |
| |
| def | is_var (a) |
| |
| def | get_var_index (a) |
| |
| def | is_app_of (a, k) |
| |
| def | If (a, b, c, ctx=None) |
| |
| def | Distinct (*args) |
| |
| def | Const (name, sort) |
| |
| def | Consts (names, sort) |
| |
| def | FreshConst (sort, prefix="c") |
| |
| def | Var (idx, s) |
| |
| def | RealVar (idx, ctx=None) |
| |
| def | RealVarVector (n, ctx=None) |
| |
| def | is_bool (a) |
| |
| def | is_true (a) |
| |
| def | is_false (a) |
| |
| def | is_and (a) |
| |
| def | is_or (a) |
| |
| def | is_implies (a) |
| |
| def | is_not (a) |
| |
| def | is_eq (a) |
| |
| def | is_distinct (a) |
| |
| def | BoolSort (ctx=None) |
| |
| def | BoolVal (val, ctx=None) |
| |
| def | Bool (name, ctx=None) |
| |
| def | Bools (names, ctx=None) |
| |
| def | BoolVector (prefix, sz, ctx=None) |
| |
| def | FreshBool (prefix="b", ctx=None) |
| |
| def | Implies (a, b, ctx=None) |
| |
| def | Xor (a, b, ctx=None) |
| |
| def | Not (a, ctx=None) |
| |
| def | mk_not (a) |
| |
| def | And (*args) |
| |
| def | Or (*args) |
| |
| def | is_pattern (a) |
| |
| def | MultiPattern (*args) |
| |
| def | is_quantifier (a) |
| |
| def | ForAll (vs, body, weight=1, qid="", skid="", patterns=[], no_patterns=[]) |
| |
| def | Exists (vs, body, weight=1, qid="", skid="", patterns=[], no_patterns=[]) |
| |
| def | Lambda (vs, body) |
| |
| def | is_arith_sort (s) |
| |
| def | is_arith (a) |
| |
| def | is_int (a) |
| |
| def | is_real (a) |
| |
| def | is_int_value (a) |
| |
| def | is_rational_value (a) |
| |
| def | is_algebraic_value (a) |
| |
| def | is_add (a) |
| |
| def | is_mul (a) |
| |
| def | is_sub (a) |
| |
| def | is_div (a) |
| |
| def | is_idiv (a) |
| |
| def | is_mod (a) |
| |
| def | is_le (a) |
| |
| def | is_lt (a) |
| |
| def | is_ge (a) |
| |
| def | is_gt (a) |
| |
| def | is_is_int (a) |
| |
| def | is_to_real (a) |
| |
| def | is_to_int (a) |
| |
| def | IntSort (ctx=None) |
| |
| def | RealSort (ctx=None) |
| |
| def | IntVal (val, ctx=None) |
| |
| def | RealVal (val, ctx=None) |
| |
| def | RatVal (a, b, ctx=None) |
| |
| def | Q (a, b, ctx=None) |
| |
| def | Int (name, ctx=None) |
| |
| def | Ints (names, ctx=None) |
| |
| def | IntVector (prefix, sz, ctx=None) |
| |
| def | FreshInt (prefix="x", ctx=None) |
| |
| def | Real (name, ctx=None) |
| |
| def | Reals (names, ctx=None) |
| |
| def | RealVector (prefix, sz, ctx=None) |
| |
| def | FreshReal (prefix="b", ctx=None) |
| |
| def | ToReal (a) |
| |
| def | ToInt (a) |
| |
| def | IsInt (a) |
| |
| def | Sqrt (a, ctx=None) |
| |
| def | Cbrt (a, ctx=None) |
| |
| def | is_bv_sort (s) |
| |
| def | is_bv (a) |
| |
| def | is_bv_value (a) |
| |
| def | BV2Int (a, is_signed=False) |
| |
| def | Int2BV (a, num_bits) |
| |
| def | BitVecSort (sz, ctx=None) |
| |
| def | BitVecVal (val, bv, ctx=None) |
| |
| def | BitVec (name, bv, ctx=None) |
| |
| def | BitVecs (names, bv, ctx=None) |
| |
| def | Concat (*args) |
| |
| def | Extract (high, low, a) |
| |
| def | ULE (a, b) |
| |
| def | ULT (a, b) |
| |
| def | UGE (a, b) |
| |
| def | UGT (a, b) |
| |
| def | UDiv (a, b) |
| |
| def | URem (a, b) |
| |
| def | SRem (a, b) |
| |
| def | LShR (a, b) |
| |
| def | RotateLeft (a, b) |
| |
| def | RotateRight (a, b) |
| |
| def | SignExt (n, a) |
| |
| def | ZeroExt (n, a) |
| |
| def | RepeatBitVec (n, a) |
| |
| def | BVRedAnd (a) |
| |
| def | BVRedOr (a) |
| |
| def | BVAddNoOverflow (a, b, signed) |
| |
| def | BVAddNoUnderflow (a, b) |
| |
| def | BVSubNoOverflow (a, b) |
| |
| def | BVSubNoUnderflow (a, b, signed) |
| |
| def | BVSDivNoOverflow (a, b) |
| |
| def | BVSNegNoOverflow (a) |
| |
| def | BVMulNoOverflow (a, b, signed) |
| |
| def | BVMulNoUnderflow (a, b) |
| |
| def | is_array_sort (a) |
| |
| def | is_array (a) |
| |
| def | is_const_array (a) |
| |
| def | is_K (a) |
| |
| def | is_map (a) |
| |
| def | is_default (a) |
| |
| def | get_map_func (a) |
| |
| def | ArraySort (*sig) |
| |
| def | Array (name, dom, rng) |
| |
| def | Update (a, i, v) |
| |
| def | Default (a) |
| |
| def | Store (a, i, v) |
| |
| def | Select (a, i) |
| |
| def | Map (f, *args) |
| |
| def | K (dom, v) |
| |
| def | Ext (a, b) |
| |
| def | SetHasSize (a, k) |
| |
| def | is_select (a) |
| |
| def | is_store (a) |
| |
| def | SetSort (s) |
| | Sets. More...
|
| |
| def | EmptySet (s) |
| |
| def | FullSet (s) |
| |
| def | SetUnion (*args) |
| |
| def | SetIntersect (*args) |
| |
| def | SetAdd (s, e) |
| |
| def | SetDel (s, e) |
| |
| def | SetComplement (s) |
| |
| def | SetDifference (a, b) |
| |
| def | IsMember (e, s) |
| |
| def | IsSubset (a, b) |
| |
| def | CreateDatatypes (*ds) |
| |
| def | TupleSort (name, sorts, ctx=None) |
| |
| def | DisjointSum (name, sorts, ctx=None) |
| |
| def | EnumSort (name, values, ctx=None) |
| |
| def | args2params (arguments, keywords, ctx=None) |
| |
| def | Model (ctx=None) |
| |
| def | is_as_array (n) |
| |
| def | get_as_array_func (n) |
| |
| def | SolverFor (logic, ctx=None, logFile=None) |
| |
| def | SimpleSolver (ctx=None, logFile=None) |
| |
| def | FiniteDomainSort (name, sz, ctx=None) |
| |
| def | is_finite_domain_sort (s) |
| |
| def | is_finite_domain (a) |
| |
| def | FiniteDomainVal (val, sort, ctx=None) |
| |
| def | is_finite_domain_value (a) |
| |
| def | AndThen (*ts, **ks) |
| |
| def | Then (*ts, **ks) |
| |
| def | OrElse (*ts, **ks) |
| |
| def | ParOr (*ts, **ks) |
| |
| def | ParThen (t1, t2, ctx=None) |
| |
| def | ParAndThen (t1, t2, ctx=None) |
| |
| def | With (t, *args, **keys) |
| |
| def | WithParams (t, p) |
| |
| def | Repeat (t, max=4294967295, ctx=None) |
| |
| def | TryFor (t, ms, ctx=None) |
| |
| def | tactics (ctx=None) |
| |
| def | tactic_description (name, ctx=None) |
| |
| def | describe_tactics () |
| |
| def | is_probe (p) |
| |
| def | probes (ctx=None) |
| |
| def | probe_description (name, ctx=None) |
| |
| def | describe_probes () |
| |
| def | FailIf (p, ctx=None) |
| |
| def | When (p, t, ctx=None) |
| |
| def | Cond (p, t1, t2, ctx=None) |
| |
| def | simplify (a, *arguments, **keywords) |
| | Utils. More...
|
| |
| def | help_simplify () |
| |
| def | simplify_param_descrs () |
| |
| def | substitute (t, *m) |
| |
| def | substitute_vars (t, *m) |
| |
| def | Sum (*args) |
| |
| def | Product (*args) |
| |
| def | AtMost (*args) |
| |
| def | AtLeast (*args) |
| |
| def | PbLe (args, k) |
| |
| def | PbGe (args, k) |
| |
| def | PbEq (args, k, ctx=None) |
| |
| def | solve (*args, **keywords) |
| |
| def | solve_using (s, *args, **keywords) |
| |
| def | prove (claim, show=False, **keywords) |
| |
| def | parse_smt2_string (s, sorts={}, decls={}, ctx=None) |
| |
| def | parse_smt2_file (f, sorts={}, decls={}, ctx=None) |
| |
| def | get_default_rounding_mode (ctx=None) |
| |
| def | set_default_rounding_mode (rm, ctx=None) |
| |
| def | get_default_fp_sort (ctx=None) |
| |
| def | set_default_fp_sort (ebits, sbits, ctx=None) |
| |
| def | Float16 (ctx=None) |
| |
| def | FloatHalf (ctx=None) |
| |
| def | Float32 (ctx=None) |
| |
| def | FloatSingle (ctx=None) |
| |
| def | Float64 (ctx=None) |
| |
| def | FloatDouble (ctx=None) |
| |
| def | Float128 (ctx=None) |
| |
| def | FloatQuadruple (ctx=None) |
| |
| def | is_fp_sort (s) |
| |
| def | is_fprm_sort (s) |
| |
| def | RoundNearestTiesToEven (ctx=None) |
| |
| def | RNE (ctx=None) |
| |
| def | RoundNearestTiesToAway (ctx=None) |
| |
| def | RNA (ctx=None) |
| |
| def | RoundTowardPositive (ctx=None) |
| |
| def | RTP (ctx=None) |
| |
| def | RoundTowardNegative (ctx=None) |
| |
| def | RTN (ctx=None) |
| |
| def | RoundTowardZero (ctx=None) |
| |
| def | RTZ (ctx=None) |
| |
| def | is_fprm (a) |
| |
| def | is_fprm_value (a) |
| |
| def | is_fp (a) |
| |
| def | is_fp_value (a) |
| |
| def | FPSort (ebits, sbits, ctx=None) |
| |
| def | fpNaN (s) |
| |
| def | fpPlusInfinity (s) |
| |
| def | fpMinusInfinity (s) |
| |
| def | fpInfinity (s, negative) |
| |
| def | fpPlusZero (s) |
| |
| def | fpMinusZero (s) |
| |
| def | fpZero (s, negative) |
| |
| def | FPVal (sig, exp=None, fps=None, ctx=None) |
| |
| def | FP (name, fpsort, ctx=None) |
| |
| def | FPs (names, fpsort, ctx=None) |
| |
| def | fpAbs (a, ctx=None) |
| |
| def | fpNeg (a, ctx=None) |
| |
| def | fpAdd (rm, a, b, ctx=None) |
| |
| def | fpSub (rm, a, b, ctx=None) |
| |
| def | fpMul (rm, a, b, ctx=None) |
| |
| def | fpDiv (rm, a, b, ctx=None) |
| |
| def | fpRem (a, b, ctx=None) |
| |
| def | fpMin (a, b, ctx=None) |
| |
| def | fpMax (a, b, ctx=None) |
| |
| def | fpFMA (rm, a, b, c, ctx=None) |
| |
| def | fpSqrt (rm, a, ctx=None) |
| |
| def | fpRoundToIntegral (rm, a, ctx=None) |
| |
| def | fpIsNaN (a, ctx=None) |
| |
| def | fpIsInf (a, ctx=None) |
| |
| def | fpIsZero (a, ctx=None) |
| |
| def | fpIsNormal (a, ctx=None) |
| |
| def | fpIsSubnormal (a, ctx=None) |
| |
| def | fpIsNegative (a, ctx=None) |
| |
| def | fpIsPositive (a, ctx=None) |
| |
| def | fpLT (a, b, ctx=None) |
| |
| def | fpLEQ (a, b, ctx=None) |
| |
| def | fpGT (a, b, ctx=None) |
| |
| def | fpGEQ (a, b, ctx=None) |
| |
| def | fpEQ (a, b, ctx=None) |
| |
| def | fpNEQ (a, b, ctx=None) |
| |
| def | fpFP (sgn, exp, sig, ctx=None) |
| |
| def | fpToFP (a1, a2=None, a3=None, ctx=None) |
| |
| def | fpBVToFP (v, sort, ctx=None) |
| |
| def | fpFPToFP (rm, v, sort, ctx=None) |
| |
| def | fpRealToFP (rm, v, sort, ctx=None) |
| |
| def | fpSignedToFP (rm, v, sort, ctx=None) |
| |
| def | fpUnsignedToFP (rm, v, sort, ctx=None) |
| |
| def | fpToFPUnsigned (rm, x, s, ctx=None) |
| |
| def | fpToSBV (rm, x, s, ctx=None) |
| |
| def | fpToUBV (rm, x, s, ctx=None) |
| |
| def | fpToReal (x, ctx=None) |
| |
| def | fpToIEEEBV (x, ctx=None) |
| |
| def | StringSort (ctx=None) |
| |
| def | SeqSort (s) |
| |
| def | is_seq (a) |
| |
| def | is_string (a) |
| |
| def | is_string_value (a) |
| |
| def | StringVal (s, ctx=None) |
| |
| def | String (name, ctx=None) |
| |
| def | Strings (names, ctx=None) |
| |
| def | SubString (s, offset, length) |
| |
| def | SubSeq (s, offset, length) |
| |
| def | Empty (s) |
| |
| def | Full (s) |
| |
| def | Unit (a) |
| |
| def | PrefixOf (a, b) |
| |
| def | SuffixOf (a, b) |
| |
| def | Contains (a, b) |
| |
| def | Replace (s, src, dst) |
| |
| def | IndexOf (s, substr, offset=None) |
| |
| def | LastIndexOf (s, substr) |
| |
| def | Length (s) |
| |
| def | StrToInt (s) |
| |
| def | IntToStr (s) |
| |
| def | Re (s, ctx=None) |
| |
| def | ReSort (s) |
| |
| def | is_re (s) |
| |
| def | InRe (s, re) |
| |
| def | Union (*args) |
| |
| def | Intersect (*args) |
| |
| def | Plus (re) |
| |
| def | Option (re) |
| |
| def | Complement (re) |
| |
| def | Star (re) |
| |
| def | Loop (re, lo, hi=0) |
| |
| def | Range (lo, hi, ctx=None) |
| |
| def | PartialOrder (a, index) |
| |
| def | LinearOrder (a, index) |
| |
| def | TreeOrder (a, index) |
| |
| def | PiecewiseLinearOrder (a, index) |
| |
| def | TransitiveClosure (f) |
| |
| def | ensure_prop_closures () |
| |
| def | user_prop_push (ctx) |
| |
| def | user_prop_pop (ctx, num_scopes) |
| |
| def | user_prop_fresh (id, ctx) |
| |
| def | user_prop_fixed (ctx, cb, id, value) |
| |
| def | user_prop_final (ctx, cb) |
| |
| def | user_prop_eq (ctx, cb, x, y) |
| |
| def | user_prop_diseq (ctx, cb, x, y) |
| |
◆ And()
Create a Z3 and-expression or and-probe.
>>> p, q, r = Bools('p q r')
>>> And(p, q, r)
And(p, q, r)
>>> P = BoolVector('p', 5)
>>> And(P)
And(p__0, p__1, p__2, p__3, p__4)
Definition at line 1813 of file z3py.py.
1814 """Create a Z3 and-expression or and-probe.
1816 >>> p, q, r = Bools('p q r')
1819 >>> P = BoolVector('p', 5)
1821 And(p__0, p__1, p__2, p__3, p__4)
1825 last_arg = args[len(args) - 1]
1826 if isinstance(last_arg, Context):
1827 ctx = args[len(args) - 1]
1828 args = args[:len(args) - 1]
1829 elif len(args) == 1
and isinstance(args[0], AstVector):
1831 args = [a
for a
in args[0]]
1834 args = _get_args(args)
1835 ctx = _get_ctx(_ctx_from_ast_arg_list(args, ctx))
1837 _z3_assert(ctx
is not None,
"At least one of the arguments must be a Z3 expression or probe")
1838 if _has_probe(args):
1839 return _probe_and(args, ctx)
1841 args = _coerce_expr_list(args, ctx)
1842 _args, sz = _to_ast_array(args)
1843 return BoolRef(
Z3_mk_and(ctx.ref(), sz, _args), ctx)
Referenced by Fixedpoint.add_rule(), Goal.as_expr(), Fixedpoint.query(), Fixedpoint.query_from_lvl(), and Fixedpoint.update_rule().
◆ AndThen()
| def z3py.AndThen |
( |
* |
ts, |
|
|
** |
ks |
|
) |
| |
Return a tactic that applies the tactics in `*ts` in sequence.
>>> x, y = Ints('x y')
>>> t = AndThen(Tactic('simplify'), Tactic('solve-eqs'))
>>> t(And(x == 0, y > x + 1))
[[Not(y <= 1)]]
>>> t(And(x == 0, y > x + 1)).as_expr()
Not(y <= 1)
Definition at line 8171 of file z3py.py.
8172 """Return a tactic that applies the tactics in `*ts` in sequence.
8174 >>> x, y = Ints('x y')
8175 >>> t = AndThen(Tactic('simplify'), Tactic('solve-eqs'))
8176 >>> t(And(x == 0, y > x + 1))
8178 >>> t(And(x == 0, y > x + 1)).as_expr()
8182 _z3_assert(len(ts) >= 2,
"At least two arguments expected")
8183 ctx = ks.get(
"ctx",
None)
8186 for i
in range(num - 1):
8187 r = _and_then(r, ts[i + 1], ctx)
Referenced by Then().
◆ append_log()
Append user-defined string to interaction log.
Definition at line 124 of file z3py.py.
125 """Append user-defined string to interaction log. """
◆ args2params()
| def z3py.args2params |
( |
|
arguments, |
|
|
|
keywords, |
|
|
|
ctx = None |
|
) |
| |
Convert python arguments into a Z3_params object.
A ':' is added to the keywords, and '_' is replaced with '-'
>>> args2params(['model', True, 'relevancy', 2], {'elim_and' : True})
(params model true relevancy 2 elim_and true)
Definition at line 5396 of file z3py.py.
5397 """Convert python arguments into a Z3_params object.
5398 A ':' is added to the keywords, and '_' is replaced with '-'
5400 >>> args2params(['model', True, 'relevancy', 2], {'elim_and' : True})
5401 (params model true relevancy 2 elim_and true)
5404 _z3_assert(len(arguments) % 2 == 0,
"Argument list must have an even number of elements.")
Referenced by Tactic.apply(), Solver.set(), Fixedpoint.set(), Optimize.set(), simplify(), and With().
◆ Array()
| def z3py.Array |
( |
|
name, |
|
|
|
dom, |
|
|
|
rng |
|
) |
| |
Return an array constant named `name` with the given domain and range sorts.
>>> a = Array('a', IntSort(), IntSort())
>>> a.sort()
Array(Int, Int)
>>> a[0]
a[0]
Definition at line 4678 of file z3py.py.
4678 def Array(name, dom, rng):
4679 """Return an array constant named `name` with the given domain and range sorts.
4681 >>> a = Array('a', IntSort(), IntSort())
◆ ArraySort()
| def z3py.ArraySort |
( |
* |
sig | ) |
|
Return the Z3 array sort with the given domain and range sorts.
>>> A = ArraySort(IntSort(), BoolSort())
>>> A
Array(Int, Bool)
>>> A.domain()
Int
>>> A.range()
Bool
>>> AA = ArraySort(IntSort(), A)
>>> AA
Array(Int, Array(Int, Bool))
Definition at line 4645 of file z3py.py.
4646 """Return the Z3 array sort with the given domain and range sorts.
4648 >>> A = ArraySort(IntSort(), BoolSort())
4655 >>> AA = ArraySort(IntSort(), A)
4657 Array(Int, Array(Int, Bool))
4659 sig = _get_args(sig)
4661 _z3_assert(len(sig) > 1,
"At least two arguments expected")
4662 arity = len(sig) - 1
4667 _z3_assert(
is_sort(s),
"Z3 sort expected")
4668 _z3_assert(s.ctx == r.ctx,
"Context mismatch")
4672 dom = (Sort * arity)()
4673 for i
in range(arity):
Referenced by Array(), and SetSort().
◆ AtLeast()
| def z3py.AtLeast |
( |
* |
args | ) |
|
Create an at-most Pseudo-Boolean k constraint.
>>> a, b, c = Bools('a b c')
>>> f = AtLeast(a, b, c, 2)
Definition at line 8800 of file z3py.py.
8801 """Create an at-most Pseudo-Boolean k constraint.
8803 >>> a, b, c = Bools('a b c')
8804 >>> f = AtLeast(a, b, c, 2)
8806 args = _get_args(args)
8808 _z3_assert(len(args) > 1,
"Non empty list of arguments expected")
8809 ctx = _ctx_from_ast_arg_list(args)
8811 _z3_assert(ctx
is not None,
"At least one of the arguments must be a Z3 expression")
8812 args1 = _coerce_expr_list(args[:-1], ctx)
8814 _args, sz = _to_ast_array(args1)
◆ AtMost()
| def z3py.AtMost |
( |
* |
args | ) |
|
Create an at-most Pseudo-Boolean k constraint.
>>> a, b, c = Bools('a b c')
>>> f = AtMost(a, b, c, 2)
Definition at line 8782 of file z3py.py.
8783 """Create an at-most Pseudo-Boolean k constraint.
8785 >>> a, b, c = Bools('a b c')
8786 >>> f = AtMost(a, b, c, 2)
8788 args = _get_args(args)
8790 _z3_assert(len(args) > 1,
"Non empty list of arguments expected")
8791 ctx = _ctx_from_ast_arg_list(args)
8793 _z3_assert(ctx
is not None,
"At least one of the arguments must be a Z3 expression")
8794 args1 = _coerce_expr_list(args[:-1], ctx)
8796 _args, sz = _to_ast_array(args1)
8797 return BoolRef(
Z3_mk_atmost(ctx.ref(), sz, _args, k), ctx)
◆ BitVec()
| def z3py.BitVec |
( |
|
name, |
|
|
|
bv, |
|
|
|
ctx = None |
|
) |
| |
Return a bit-vector constant named `name`. `bv` may be the number of bits of a bit-vector sort.
If `ctx=None`, then the global context is used.
>>> x = BitVec('x', 16)
>>> is_bv(x)
True
>>> x.size()
16
>>> x.sort()
BitVec(16)
>>> word = BitVecSort(16)
>>> x2 = BitVec('x', word)
>>> eq(x, x2)
True
Definition at line 3999 of file z3py.py.
3999 def BitVec(name, bv, ctx=None):
4000 """Return a bit-vector constant named `name`. `bv` may be the number of bits of a bit-vector sort.
4001 If `ctx=None`, then the global context is used.
4003 >>> x = BitVec('x', 16)
4010 >>> word = BitVecSort(16)
4011 >>> x2 = BitVec('x', word)
4015 if isinstance(bv, BitVecSortRef):
Referenced by BitVecs().
◆ BitVecs()
| def z3py.BitVecs |
( |
|
names, |
|
|
|
bv, |
|
|
|
ctx = None |
|
) |
| |
Return a tuple of bit-vector constants of size bv.
>>> x, y, z = BitVecs('x y z', 16)
>>> x.size()
16
>>> x.sort()
BitVec(16)
>>> Sum(x, y, z)
0 + x + y + z
>>> Product(x, y, z)
1*x*y*z
>>> simplify(Product(x, y, z))
x*y*z
Definition at line 4023 of file z3py.py.
4023 def BitVecs(names, bv, ctx=None):
4024 """Return a tuple of bit-vector constants of size bv.
4026 >>> x, y, z = BitVecs('x y z', 16)
4033 >>> Product(x, y, z)
4035 >>> simplify(Product(x, y, z))
4039 if isinstance(names, str):
4040 names = names.split(
" ")
4041 return [
BitVec(name, bv, ctx)
for name
in names]
◆ BitVecSort()
| def z3py.BitVecSort |
( |
|
sz, |
|
|
|
ctx = None |
|
) |
| |
Return a Z3 bit-vector sort of the given size. If `ctx=None`, then the global context is used.
>>> Byte = BitVecSort(8)
>>> Word = BitVecSort(16)
>>> Byte
BitVec(8)
>>> x = Const('x', Byte)
>>> eq(x, BitVec('x', 8))
True
Definition at line 3967 of file z3py.py.
3968 """Return a Z3 bit-vector sort of the given size. If `ctx=None`, then the global context is used.
3970 >>> Byte = BitVecSort(8)
3971 >>> Word = BitVecSort(16)
3974 >>> x = Const('x', Byte)
3975 >>> eq(x, BitVec('x', 8))
Referenced by BitVec(), and BitVecVal().
◆ BitVecVal()
| def z3py.BitVecVal |
( |
|
val, |
|
|
|
bv, |
|
|
|
ctx = None |
|
) |
| |
Return a bit-vector value with the given number of bits. If `ctx=None`, then the global context is used.
>>> v = BitVecVal(10, 32)
>>> v
10
>>> print("0x%.8x" % v.as_long())
0x0000000a
Definition at line 3982 of file z3py.py.
3983 """Return a bit-vector value with the given number of bits. If `ctx=None`, then the global context is used.
3985 >>> v = BitVecVal(10, 32)
3988 >>> print("0x%.8x" % v.as_long())
3993 return BitVecNumRef(
Z3_mk_numeral(ctx.ref(), _to_int_str(val), bv.ast), ctx)
◆ Bool()
| def z3py.Bool |
( |
|
name, |
|
|
|
ctx = None |
|
) |
| |
◆ Bools()
| def z3py.Bools |
( |
|
names, |
|
|
|
ctx = None |
|
) |
| |
Return a tuple of Boolean constants.
`names` is a single string containing all names separated by blank spaces.
If `ctx=None`, then the global context is used.
>>> p, q, r = Bools('p q r')
>>> And(p, Or(q, r))
And(p, Or(q, r))
Definition at line 1704 of file z3py.py.
1704 def Bools(names, ctx=None):
1705 """Return a tuple of Boolean constants.
1707 `names` is a single string containing all names separated by blank spaces.
1708 If `ctx=None`, then the global context is used.
1710 >>> p, q, r = Bools('p q r')
1711 >>> And(p, Or(q, r))
1715 if isinstance(names, str):
1716 names = names.split(
" ")
1717 return [
Bool(name, ctx)
for name
in names]
◆ BoolSort()
| def z3py.BoolSort |
( |
|
ctx = None | ) |
|
Return the Boolean Z3 sort. If `ctx=None`, then the global context is used.
>>> BoolSort()
Bool
>>> p = Const('p', BoolSort())
>>> is_bool(p)
True
>>> r = Function('r', IntSort(), IntSort(), BoolSort())
>>> r(0, 1)
r(0, 1)
>>> is_bool(r(0, 1))
True
Definition at line 1655 of file z3py.py.
1656 """Return the Boolean Z3 sort. If `ctx=None`, then the global context is used.
1660 >>> p = Const('p', BoolSort())
1663 >>> r = Function('r', IntSort(), IntSort(), BoolSort())
1666 >>> is_bool(r(0, 1))
Referenced by Goal.assert_exprs(), Solver.assert_exprs(), Fixedpoint.assert_exprs(), Optimize.assert_exprs(), Bool(), Solver.check(), FreshBool(), If(), Implies(), Not(), SetSort(), QuantifierRef.sort(), and Xor().
◆ BoolVal()
| def z3py.BoolVal |
( |
|
val, |
|
|
|
ctx = None |
|
) |
| |
◆ BoolVector()
| def z3py.BoolVector |
( |
|
prefix, |
|
|
|
sz, |
|
|
|
ctx = None |
|
) |
| |
Return a list of Boolean constants of size `sz`.
The constants are named using the given prefix.
If `ctx=None`, then the global context is used.
>>> P = BoolVector('p', 3)
>>> P
[p__0, p__1, p__2]
>>> And(P)
And(p__0, p__1, p__2)
Definition at line 1720 of file z3py.py.
1721 """Return a list of Boolean constants of size `sz`.
1723 The constants are named using the given prefix.
1724 If `ctx=None`, then the global context is used.
1726 >>> P = BoolVector('p', 3)
1730 And(p__0, p__1, p__2)
1732 return [
Bool(
"%s__%s" % (prefix, i))
for i
in range(sz)]
◆ BV2Int()
| def z3py.BV2Int |
( |
|
a, |
|
|
|
is_signed = False |
|
) |
| |
Return the Z3 expression BV2Int(a).
>>> b = BitVec('b', 3)
>>> BV2Int(b).sort()
Int
>>> x = Int('x')
>>> x > BV2Int(b)
x > BV2Int(b)
>>> x > BV2Int(b, is_signed=False)
x > BV2Int(b)
>>> x > BV2Int(b, is_signed=True)
x > If(b < 0, BV2Int(b) - 8, BV2Int(b))
>>> solve(x > BV2Int(b), b == 1, x < 3)
[x = 2, b = 1]
Definition at line 3935 of file z3py.py.
3935 def BV2Int(a, is_signed=False):
3936 """Return the Z3 expression BV2Int(a).
3938 >>> b = BitVec('b', 3)
3939 >>> BV2Int(b).sort()
3944 >>> x > BV2Int(b, is_signed=False)
3946 >>> x > BV2Int(b, is_signed=True)
3947 x > If(b < 0, BV2Int(b) - 8, BV2Int(b))
3948 >>> solve(x > BV2Int(b), b == 1, x < 3)
3952 _z3_assert(
is_bv(a),
"First argument must be a Z3 bit-vector expression")
3955 return ArithRef(
Z3_mk_bv2int(ctx.ref(), a.as_ast(), is_signed), ctx)
◆ BVAddNoOverflow()
| def z3py.BVAddNoOverflow |
( |
|
a, |
|
|
|
b, |
|
|
|
signed |
|
) |
| |
A predicate the determines that bit-vector addition does not overflow
Definition at line 4421 of file z3py.py.
4422 """A predicate the determines that bit-vector addition does not overflow"""
4423 _check_bv_args(a, b)
4424 a, b = _coerce_exprs(a, b)
◆ BVAddNoUnderflow()
| def z3py.BVAddNoUnderflow |
( |
|
a, |
|
|
|
b |
|
) |
| |
A predicate the determines that signed bit-vector addition does not underflow
Definition at line 4428 of file z3py.py.
4429 """A predicate the determines that signed bit-vector addition does not underflow"""
4430 _check_bv_args(a, b)
4431 a, b = _coerce_exprs(a, b)
◆ BVMulNoOverflow()
| def z3py.BVMulNoOverflow |
( |
|
a, |
|
|
|
b, |
|
|
|
signed |
|
) |
| |
A predicate the determines that bit-vector multiplication does not overflow
Definition at line 4463 of file z3py.py.
4464 """A predicate the determines that bit-vector multiplication does not overflow"""
4465 _check_bv_args(a, b)
4466 a, b = _coerce_exprs(a, b)
◆ BVMulNoUnderflow()
| def z3py.BVMulNoUnderflow |
( |
|
a, |
|
|
|
b |
|
) |
| |
A predicate the determines that bit-vector signed multiplication does not underflow
Definition at line 4470 of file z3py.py.
4471 """A predicate the determines that bit-vector signed multiplication does not underflow"""
4472 _check_bv_args(a, b)
4473 a, b = _coerce_exprs(a, b)
◆ BVRedAnd()
Return the reduction-and expression of `a`.
Definition at line 4407 of file z3py.py.
4408 """Return the reduction-and expression of `a`."""
4410 _z3_assert(
is_bv(a),
"First argument must be a Z3 bit-vector expression")
◆ BVRedOr()
Return the reduction-or expression of `a`.
Definition at line 4414 of file z3py.py.
4415 """Return the reduction-or expression of `a`."""
4417 _z3_assert(
is_bv(a),
"First argument must be a Z3 bit-vector expression")
4418 return BitVecRef(
Z3_mk_bvredor(a.ctx_ref(), a.as_ast()), a.ctx)
◆ BVSDivNoOverflow()
| def z3py.BVSDivNoOverflow |
( |
|
a, |
|
|
|
b |
|
) |
| |
A predicate the determines that bit-vector signed division does not overflow
Definition at line 4449 of file z3py.py.
4450 """A predicate the determines that bit-vector signed division does not overflow"""
4451 _check_bv_args(a, b)
4452 a, b = _coerce_exprs(a, b)
◆ BVSNegNoOverflow()
| def z3py.BVSNegNoOverflow |
( |
|
a | ) |
|
A predicate the determines that bit-vector unary negation does not overflow
Definition at line 4456 of file z3py.py.
4457 """A predicate the determines that bit-vector unary negation does not overflow"""
4459 _z3_assert(
is_bv(a),
"First argument must be a Z3 bit-vector expression")
◆ BVSubNoOverflow()
| def z3py.BVSubNoOverflow |
( |
|
a, |
|
|
|
b |
|
) |
| |
A predicate the determines that bit-vector subtraction does not overflow
Definition at line 4435 of file z3py.py.
4436 """A predicate the determines that bit-vector subtraction does not overflow"""
4437 _check_bv_args(a, b)
4438 a, b = _coerce_exprs(a, b)
◆ BVSubNoUnderflow()
| def z3py.BVSubNoUnderflow |
( |
|
a, |
|
|
|
b, |
|
|
|
signed |
|
) |
| |
A predicate the determines that bit-vector subtraction does not underflow
Definition at line 4442 of file z3py.py.
4443 """A predicate the determines that bit-vector subtraction does not underflow"""
4444 _check_bv_args(a, b)
4445 a, b = _coerce_exprs(a, b)
◆ Cbrt()
| def z3py.Cbrt |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Return a Z3 expression which represents the cubic root of a.
>>> x = Real('x')
>>> Cbrt(x)
x**(1/3)
Definition at line 3386 of file z3py.py.
3386 def Cbrt(a, ctx=None):
3387 """ Return a Z3 expression which represents the cubic root of a.
◆ Complement()
| def z3py.Complement |
( |
|
re | ) |
|
Create the complement regular expression.
Definition at line 11002 of file z3py.py.
11003 """Create the complement regular expression."""
◆ Concat()
| def z3py.Concat |
( |
* |
args | ) |
|
Create a Z3 bit-vector concatenation expression.
>>> v = BitVecVal(1, 4)
>>> Concat(v, v+1, v)
Concat(Concat(1, 1 + 1), 1)
>>> simplify(Concat(v, v+1, v))
289
>>> print("%.3x" % simplify(Concat(v, v+1, v)).as_long())
121
Definition at line 4044 of file z3py.py.
4045 """Create a Z3 bit-vector concatenation expression.
4047 >>> v = BitVecVal(1, 4)
4048 >>> Concat(v, v+1, v)
4049 Concat(Concat(1, 1 + 1), 1)
4050 >>> simplify(Concat(v, v+1, v))
4052 >>> print("%.3x" % simplify(Concat(v, v+1, v)).as_long())
4055 args = _get_args(args)
4058 _z3_assert(sz >= 2,
"At least two arguments expected.")
4065 if is_seq(args[0])
or isinstance(args[0], str):
4066 args = [_coerce_seq(s, ctx)
for s
in args]
4068 _z3_assert(all([
is_seq(a)
for a
in args]),
"All arguments must be sequence expressions.")
4071 v[i] = args[i].as_ast()
4076 _z3_assert(all([
is_re(a)
for a
in args]),
"All arguments must be regular expressions.")
4079 v[i] = args[i].as_ast()
4083 _z3_assert(all([
is_bv(a)
for a
in args]),
"All arguments must be Z3 bit-vector expressions.")
4085 for i
in range(sz - 1):
4086 r = BitVecRef(
Z3_mk_concat(ctx.ref(), r.as_ast(), args[i + 1].as_ast()), ctx)
Referenced by SeqRef.__add__(), and SeqRef.__radd__().
◆ Cond()
| def z3py.Cond |
( |
|
p, |
|
|
|
t1, |
|
|
|
t2, |
|
|
|
ctx = None |
|
) |
| |
Return a tactic that applies tactic `t1` to a goal if probe `p` evaluates to true, and `t2` otherwise.
>>> t = Cond(Probe('is-qfnra'), Tactic('qfnra'), Tactic('smt'))
Definition at line 8628 of file z3py.py.
8628 def Cond(p, t1, t2, ctx=None):
8629 """Return a tactic that applies tactic `t1` to a goal if probe `p` evaluates to true, and `t2` otherwise.
8631 >>> t = Cond(Probe('is-qfnra'), Tactic('qfnra'), Tactic('smt'))
8633 p = _to_probe(p, ctx)
8634 t1 = _to_tactic(t1, ctx)
8635 t2 = _to_tactic(t2, ctx)
8636 return Tactic(
Z3_tactic_cond(t1.ctx.ref(), p.probe, t1.tactic, t2.tactic), t1.ctx)
Referenced by If().
◆ Const()
| def z3py.Const |
( |
|
name, |
|
|
|
sort |
|
) |
| |
Create a constant of the given sort.
>>> Const('x', IntSort())
x
Definition at line 1405 of file z3py.py.
1405 def Const(name, sort):
1406 """Create a constant of the given sort.
1408 >>> Const('x', IntSort())
1412 _z3_assert(isinstance(sort, SortRef),
"Z3 sort expected")
Referenced by Consts().
◆ Consts()
| def z3py.Consts |
( |
|
names, |
|
|
|
sort |
|
) |
| |
Create several constants of the given sort.
`names` is a string containing the names of all constants to be created.
Blank spaces separate the names of different constants.
>>> x, y, z = Consts('x y z', IntSort())
>>> x + y + z
x + y + z
Definition at line 1417 of file z3py.py.
1418 """Create several constants of the given sort.
1420 `names` is a string containing the names of all constants to be created.
1421 Blank spaces separate the names of different constants.
1423 >>> x, y, z = Consts('x y z', IntSort())
1427 if isinstance(names, str):
1428 names = names.split(
" ")
1429 return [
Const(name, sort)
for name
in names]
◆ Contains()
| def z3py.Contains |
( |
|
a, |
|
|
|
b |
|
) |
| |
Check if 'a' contains 'b'
>>> s1 = Contains("abc", "ab")
>>> simplify(s1)
True
>>> s2 = Contains("abc", "bc")
>>> simplify(s2)
True
>>> x, y, z = Strings('x y z')
>>> s3 = Contains(Concat(x,y,z), y)
>>> simplify(s3)
True
Definition at line 10789 of file z3py.py.
10790 """Check if 'a' contains 'b'
10791 >>> s1 = Contains("abc", "ab")
10794 >>> s2 = Contains("abc", "bc")
10797 >>> x, y, z = Strings('x y z')
10798 >>> s3 = Contains(Concat(x,y,z), y)
10802 ctx = _get_ctx2(a, b)
10803 a = _coerce_seq(a, ctx)
10804 b = _coerce_seq(b, ctx)
◆ CreateDatatypes()
| def z3py.CreateDatatypes |
( |
* |
ds | ) |
|
Create mutually recursive Z3 datatypes using 1 or more Datatype helper objects.
In the following example we define a Tree-List using two mutually recursive datatypes.
>>> TreeList = Datatype('TreeList')
>>> Tree = Datatype('Tree')
>>> # Tree has two constructors: leaf and node
>>> Tree.declare('leaf', ('val', IntSort()))
>>> # a node contains a list of trees
>>> Tree.declare('node', ('children', TreeList))
>>> TreeList.declare('nil')
>>> TreeList.declare('cons', ('car', Tree), ('cdr', TreeList))
>>> Tree, TreeList = CreateDatatypes(Tree, TreeList)
>>> Tree.val(Tree.leaf(10))
val(leaf(10))
>>> simplify(Tree.val(Tree.leaf(10)))
10
>>> n1 = Tree.node(TreeList.cons(Tree.leaf(10), TreeList.cons(Tree.leaf(20), TreeList.nil)))
>>> n1
node(cons(leaf(10), cons(leaf(20), nil)))
>>> n2 = Tree.node(TreeList.cons(n1, TreeList.nil))
>>> simplify(n2 == n1)
False
>>> simplify(TreeList.car(Tree.children(n2)) == n1)
True
Definition at line 5092 of file z3py.py.
5093 """Create mutually recursive Z3 datatypes using 1 or more Datatype helper objects.
5095 In the following example we define a Tree-List using two mutually recursive datatypes.
5097 >>> TreeList = Datatype('TreeList')
5098 >>> Tree = Datatype('Tree')
5099 >>> # Tree has two constructors: leaf and node
5100 >>> Tree.declare('leaf', ('val', IntSort()))
5101 >>> # a node contains a list of trees
5102 >>> Tree.declare('node', ('children', TreeList))
5103 >>> TreeList.declare('nil')
5104 >>> TreeList.declare('cons', ('car', Tree), ('cdr', TreeList))
5105 >>> Tree, TreeList = CreateDatatypes(Tree, TreeList)
5106 >>> Tree.val(Tree.leaf(10))
5108 >>> simplify(Tree.val(Tree.leaf(10)))
5110 >>> n1 = Tree.node(TreeList.cons(Tree.leaf(10), TreeList.cons(Tree.leaf(20), TreeList.nil)))
5112 node(cons(leaf(10), cons(leaf(20), nil)))
5113 >>> n2 = Tree.node(TreeList.cons(n1, TreeList.nil))
5114 >>> simplify(n2 == n1)
5116 >>> simplify(TreeList.car(Tree.children(n2)) == n1)
5121 _z3_assert(len(ds) > 0,
"At least one Datatype must be specified")
5122 _z3_assert(all([isinstance(d, Datatype)
for d
in ds]),
"Arguments must be Datatypes")
5123 _z3_assert(all([d.ctx == ds[0].ctx
for d
in ds]),
"Context mismatch")
5124 _z3_assert(all([d.constructors != []
for d
in ds]),
"Non-empty Datatypes expected")
5127 names = (Symbol * num)()
5128 out = (Sort * num)()
5129 clists = (ConstructorList * num)()
5131 for i
in range(num):
5134 num_cs = len(d.constructors)
5135 cs = (Constructor * num_cs)()
5136 for j
in range(num_cs):
5137 c = d.constructors[j]
5142 fnames = (Symbol * num_fs)()
5143 sorts = (Sort * num_fs)()
5144 refs = (ctypes.c_uint * num_fs)()
5145 for k
in range(num_fs):
5149 if isinstance(ftype, Datatype):
5152 ds.count(ftype) == 1,
5153 "One and only one occurrence of each datatype is expected",
5156 refs[k] = ds.index(ftype)
5159 _z3_assert(
is_sort(ftype),
"Z3 sort expected")
5160 sorts[k] = ftype.ast
5163 to_delete.append(ScopedConstructor(cs[j], ctx))
5165 to_delete.append(ScopedConstructorList(clists[i], ctx))
5169 for i
in range(num):
5170 dref = DatatypeSortRef(out[i], ctx)
5171 num_cs = dref.num_constructors()
5172 for j
in range(num_cs):
5173 cref = dref.constructor(j)
5174 cref_name = cref.name()
5175 cref_arity = cref.arity()
5176 if cref.arity() == 0:
5178 setattr(dref, cref_name, cref)
5179 rref = dref.recognizer(j)
5180 setattr(dref,
"is_" + cref_name, rref)
5181 for k
in range(cref_arity):
5182 aref = dref.accessor(j, k)
5183 setattr(dref, aref.name(), aref)
5185 return tuple(result)
Referenced by Datatype.create().
◆ DeclareSort()
| def z3py.DeclareSort |
( |
|
name, |
|
|
|
ctx = None |
|
) |
| |
Create a new uninterpreted sort named `name`.
If `ctx=None`, then the new sort is declared in the global Z3Py context.
>>> A = DeclareSort('A')
>>> a = Const('a', A)
>>> b = Const('b', A)
>>> a.sort() == A
True
>>> b.sort() == A
True
>>> a == b
a == b
Definition at line 690 of file z3py.py.
691 """Create a new uninterpreted sort named `name`.
693 If `ctx=None`, then the new sort is declared in the global Z3Py context.
695 >>> A = DeclareSort('A')
696 >>> a = Const('a', A)
697 >>> b = Const('b', A)
◆ Default()
Return a default value for array expression.
>>> b = K(IntSort(), 1)
>>> prove(Default(b) == 1)
proved
Definition at line 4714 of file z3py.py.
4715 """ Return a default value for array expression.
4716 >>> b = K(IntSort(), 1)
4717 >>> prove(Default(b) == 1)
4721 _z3_assert(
is_array_sort(a),
"First argument must be a Z3 array expression")
◆ describe_probes()
| def z3py.describe_probes |
( |
| ) |
|
Display a (tabular) description of all available probes in Z3.
Definition at line 8549 of file z3py.py.
8550 """Display a (tabular) description of all available probes in Z3."""
8553 print(
'<table border="1" cellpadding="2" cellspacing="0">')
8556 print(
'<tr style="background-color:#CFCFCF">')
8561 print(
"<td>%s</td><td>%s</td></tr>" % (p, insert_line_breaks(
probe_description(p), 40)))
◆ describe_tactics()
| def z3py.describe_tactics |
( |
| ) |
|
Display a (tabular) description of all available tactics in Z3.
Definition at line 8343 of file z3py.py.
8344 """Display a (tabular) description of all available tactics in Z3."""
8347 print(
'<table border="1" cellpadding="2" cellspacing="0">')
8350 print(
'<tr style="background-color:#CFCFCF">')
8355 print(
"<td>%s</td><td>%s</td></tr>" % (t, insert_line_breaks(
tactic_description(t), 40)))
◆ disable_trace()
| def z3py.disable_trace |
( |
|
msg | ) |
|
◆ DisjointSum()
| def z3py.DisjointSum |
( |
|
name, |
|
|
|
sorts, |
|
|
|
ctx = None |
|
) |
| |
Create a named tagged union sort base on a set of underlying sorts
Example:
>>> sum, ((inject0, extract0), (inject1, extract1)) = DisjointSum("+", [IntSort(), StringSort()])
Definition at line 5305 of file z3py.py.
5306 """Create a named tagged union sort base on a set of underlying sorts
5308 >>> sum, ((inject0, extract0), (inject1, extract1)) = DisjointSum("+", [IntSort(), StringSort()])
5310 sum = Datatype(name, ctx)
5311 for i
in range(len(sorts)):
5312 sum.declare(
"inject%d" % i, (
"project%d" % i, sorts[i]))
5314 return sum, [(sum.constructor(i), sum.accessor(i, 0))
for i
in range(len(sorts))]
◆ Distinct()
| def z3py.Distinct |
( |
* |
args | ) |
|
Create a Z3 distinct expression.
>>> x = Int('x')
>>> y = Int('y')
>>> Distinct(x, y)
x != y
>>> z = Int('z')
>>> Distinct(x, y, z)
Distinct(x, y, z)
>>> simplify(Distinct(x, y, z))
Distinct(x, y, z)
>>> simplify(Distinct(x, y, z), blast_distinct=True)
And(Not(x == y), Not(x == z), Not(y == z))
Definition at line 1372 of file z3py.py.
1373 """Create a Z3 distinct expression.
1380 >>> Distinct(x, y, z)
1382 >>> simplify(Distinct(x, y, z))
1384 >>> simplify(Distinct(x, y, z), blast_distinct=True)
1385 And(Not(x == y), Not(x == z), Not(y == z))
1387 args = _get_args(args)
1388 ctx = _ctx_from_ast_arg_list(args)
1390 _z3_assert(ctx
is not None,
"At least one of the arguments must be a Z3 expression")
1391 args = _coerce_expr_list(args, ctx)
1392 _args, sz = _to_ast_array(args)
◆ Empty()
Create the empty sequence of the given sort
>>> e = Empty(StringSort())
>>> e2 = StringVal("")
>>> print(e.eq(e2))
True
>>> e3 = Empty(SeqSort(IntSort()))
>>> print(e3)
Empty(Seq(Int))
>>> e4 = Empty(ReSort(SeqSort(IntSort())))
>>> print(e4)
Empty(ReSort(Seq(Int)))
Definition at line 10720 of file z3py.py.
10721 """Create the empty sequence of the given sort
10722 >>> e = Empty(StringSort())
10723 >>> e2 = StringVal("")
10724 >>> print(e.eq(e2))
10726 >>> e3 = Empty(SeqSort(IntSort()))
10729 >>> e4 = Empty(ReSort(SeqSort(IntSort())))
10731 Empty(ReSort(Seq(Int)))
10733 if isinstance(s, SeqSortRef):
10735 if isinstance(s, ReSortRef):
10737 raise Z3Exception(
"Non-sequence, non-regular expression sort passed to Empty")
◆ EmptySet()
Create the empty set
>>> EmptySet(IntSort())
K(Int, False)
Definition at line 4856 of file z3py.py.
4857 """Create the empty set
4858 >>> EmptySet(IntSort())
◆ enable_trace()
| def z3py.enable_trace |
( |
|
msg | ) |
|
◆ ensure_prop_closures()
| def z3py.ensure_prop_closures |
( |
| ) |
|
◆ EnumSort()
| def z3py.EnumSort |
( |
|
name, |
|
|
|
values, |
|
|
|
ctx = None |
|
) |
| |
Return a new enumeration sort named `name` containing the given values.
The result is a pair (sort, list of constants).
Example:
>>> Color, (red, green, blue) = EnumSort('Color', ['red', 'green', 'blue'])
Definition at line 5317 of file z3py.py.
5317 def EnumSort(name, values, ctx=None):
5318 """Return a new enumeration sort named `name` containing the given values.
5320 The result is a pair (sort, list of constants).
5322 >>> Color, (red, green, blue) = EnumSort('Color', ['red', 'green', 'blue'])
5325 _z3_assert(isinstance(name, str),
"Name must be a string")
5326 _z3_assert(all([isinstance(v, str)
for v
in values]),
"Eumeration sort values must be strings")
5327 _z3_assert(len(values) > 0,
"At least one value expected")
5330 _val_names = (Symbol * num)()
5331 for i
in range(num):
5333 _values = (FuncDecl * num)()
5334 _testers = (FuncDecl * num)()
5338 for i
in range(num):
5339 V.append(FuncDeclRef(_values[i], ctx))
5340 V = [a()
for a
in V]
◆ eq()
Return `True` if `a` and `b` are structurally identical AST nodes.
>>> x = Int('x')
>>> y = Int('y')
>>> eq(x, y)
False
>>> eq(x + 1, x + 1)
True
>>> eq(x + 1, 1 + x)
False
>>> eq(simplify(x + 1), simplify(1 + x))
True
Definition at line 471 of file z3py.py.
472 """Return `True` if `a` and `b` are structurally identical AST nodes.
482 >>> eq(simplify(x + 1), simplify(1 + x))
Referenced by substitute().
◆ Exists()
| def z3py.Exists |
( |
|
vs, |
|
|
|
body, |
|
|
|
weight = 1, |
|
|
|
qid = "", |
|
|
|
skid = "", |
|
|
|
patterns = [], |
|
|
|
no_patterns = [] |
|
) |
| |
Create a Z3 exists formula.
The parameters `weight`, `qif`, `skid`, `patterns` and `no_patterns` are optional annotations.
>>> f = Function('f', IntSort(), IntSort(), IntSort())
>>> x = Int('x')
>>> y = Int('y')
>>> q = Exists([x, y], f(x, y) >= x, skid="foo")
>>> q
Exists([x, y], f(x, y) >= x)
>>> is_quantifier(q)
True
>>> r = Tactic('nnf')(q).as_expr()
>>> is_quantifier(r)
False
Definition at line 2205 of file z3py.py.
2205 def Exists(vs, body, weight=1, qid="", skid="", patterns=[], no_patterns=[]):
2206 """Create a Z3 exists formula.
2208 The parameters `weight`, `qif`, `skid`, `patterns` and `no_patterns` are optional annotations.
2211 >>> f = Function('f', IntSort(), IntSort(), IntSort())
2214 >>> q = Exists([x, y], f(x, y) >= x, skid="foo")
2216 Exists([x, y], f(x, y) >= x)
2217 >>> is_quantifier(q)
2219 >>> r = Tactic('nnf')(q).as_expr()
2220 >>> is_quantifier(r)
2223 return _mk_quantifier(
False, vs, body, weight, qid, skid, patterns, no_patterns)
Referenced by Fixedpoint.abstract().
◆ Ext()
Return extensionality index for one-dimensional arrays.
>> a, b = Consts('a b', SetSort(IntSort()))
>> Ext(a, b)
Ext(a, b)
Definition at line 4802 of file z3py.py.
4803 """Return extensionality index for one-dimensional arrays.
4804 >> a, b = Consts('a b', SetSort(IntSort()))
4811 return _to_expr_ref(
Z3_mk_array_ext(ctx.ref(), a.as_ast(), b.as_ast()), ctx)
◆ Extract()
| def z3py.Extract |
( |
|
high, |
|
|
|
low, |
|
|
|
a |
|
) |
| |
Create a Z3 bit-vector extraction expression.
Extract is overloaded to also work on sequence extraction.
The functions SubString and SubSeq are redirected to Extract.
For this case, the arguments are reinterpreted as:
high - is a sequence (string)
low - is an offset
a - is the length to be extracted
>>> x = BitVec('x', 8)
>>> Extract(6, 2, x)
Extract(6, 2, x)
>>> Extract(6, 2, x).sort()
BitVec(5)
>>> simplify(Extract(StringVal("abcd"),2,1))
"c"
Definition at line 4090 of file z3py.py.
4091 """Create a Z3 bit-vector extraction expression.
4092 Extract is overloaded to also work on sequence extraction.
4093 The functions SubString and SubSeq are redirected to Extract.
4094 For this case, the arguments are reinterpreted as:
4095 high - is a sequence (string)
4097 a - is the length to be extracted
4099 >>> x = BitVec('x', 8)
4100 >>> Extract(6, 2, x)
4102 >>> Extract(6, 2, x).sort()
4104 >>> simplify(Extract(StringVal("abcd"),2,1))
4107 if isinstance(high, str):
4111 offset, length = _coerce_exprs(low, a, s.ctx)
4112 return SeqRef(
Z3_mk_seq_extract(s.ctx_ref(), s.as_ast(), offset.as_ast(), length.as_ast()), s.ctx)
4114 _z3_assert(low <= high,
"First argument must be greater than or equal to second argument")
4115 _z3_assert(_is_int(high)
and high >= 0
and _is_int(low)
and low >= 0,
4116 "First and second arguments must be non negative integers")
4117 _z3_assert(
is_bv(a),
"Third argument must be a Z3 bit-vector expression")
4118 return BitVecRef(
Z3_mk_extract(a.ctx_ref(), high, low, a.as_ast()), a.ctx)
Referenced by SubSeq(), and SubString().
◆ FailIf()
| def z3py.FailIf |
( |
|
p, |
|
|
|
ctx = None |
|
) |
| |
Return a tactic that fails if the probe `p` evaluates to true.
Otherwise, it returns the input goal unmodified.
In the following example, the tactic applies 'simplify' if and only if there are
more than 2 constraints in the goal.
>>> t = OrElse(FailIf(Probe('size') > 2), Tactic('simplify'))
>>> x, y = Ints('x y')
>>> g = Goal()
>>> g.add(x > 0)
>>> g.add(y > 0)
>>> t(g)
[[x > 0, y > 0]]
>>> g.add(x == y + 1)
>>> t(g)
[[Not(x <= 0), Not(y <= 0), x == 1 + y]]
Definition at line 8586 of file z3py.py.
8587 """Return a tactic that fails if the probe `p` evaluates to true.
8588 Otherwise, it returns the input goal unmodified.
8590 In the following example, the tactic applies 'simplify' if and only if there are
8591 more than 2 constraints in the goal.
8593 >>> t = OrElse(FailIf(Probe('size') > 2), Tactic('simplify'))
8594 >>> x, y = Ints('x y')
8600 >>> g.add(x == y + 1)
8602 [[Not(x <= 0), Not(y <= 0), x == 1 + y]]
8604 p = _to_probe(p, ctx)
◆ FiniteDomainSort()
| def z3py.FiniteDomainSort |
( |
|
name, |
|
|
|
sz, |
|
|
|
ctx = None |
|
) |
| |
Create a named finite domain sort of a given size sz
Definition at line 7590 of file z3py.py.
7591 """Create a named finite domain sort of a given size sz"""
7592 if not isinstance(name, Symbol):
◆ FiniteDomainVal()
| def z3py.FiniteDomainVal |
( |
|
val, |
|
|
|
sort, |
|
|
|
ctx = None |
|
) |
| |
Return a Z3 finite-domain value. If `ctx=None`, then the global context is used.
>>> s = FiniteDomainSort('S', 256)
>>> FiniteDomainVal(255, s)
255
>>> FiniteDomainVal('100', s)
100
Definition at line 7660 of file z3py.py.
7661 """Return a Z3 finite-domain value. If `ctx=None`, then the global context is used.
7663 >>> s = FiniteDomainSort('S', 256)
7664 >>> FiniteDomainVal(255, s)
7666 >>> FiniteDomainVal('100', s)
7672 return FiniteDomainNumRef(
Z3_mk_numeral(ctx.ref(), _to_int_str(val), sort.ast), ctx)
◆ Float128()
| def z3py.Float128 |
( |
|
ctx = None | ) |
|
Floating-point 128-bit (quadruple) sort.
Definition at line 9266 of file z3py.py.
9267 """Floating-point 128-bit (quadruple) sort."""
◆ Float16()
| def z3py.Float16 |
( |
|
ctx = None | ) |
|
Floating-point 16-bit (half) sort.
Definition at line 9230 of file z3py.py.
9231 """Floating-point 16-bit (half) sort."""
◆ Float32()
| def z3py.Float32 |
( |
|
ctx = None | ) |
|
Floating-point 32-bit (single) sort.
Definition at line 9242 of file z3py.py.
9243 """Floating-point 32-bit (single) sort."""
◆ Float64()
| def z3py.Float64 |
( |
|
ctx = None | ) |
|
Floating-point 64-bit (double) sort.
Definition at line 9254 of file z3py.py.
9255 """Floating-point 64-bit (double) sort."""
◆ FloatDouble()
| def z3py.FloatDouble |
( |
|
ctx = None | ) |
|
Floating-point 64-bit (double) sort.
Definition at line 9260 of file z3py.py.
9261 """Floating-point 64-bit (double) sort."""
◆ FloatHalf()
| def z3py.FloatHalf |
( |
|
ctx = None | ) |
|
Floating-point 16-bit (half) sort.
Definition at line 9236 of file z3py.py.
9237 """Floating-point 16-bit (half) sort."""
◆ FloatQuadruple()
| def z3py.FloatQuadruple |
( |
|
ctx = None | ) |
|
Floating-point 128-bit (quadruple) sort.
Definition at line 9272 of file z3py.py.
9273 """Floating-point 128-bit (quadruple) sort."""
◆ FloatSingle()
| def z3py.FloatSingle |
( |
|
ctx = None | ) |
|
Floating-point 32-bit (single) sort.
Definition at line 9248 of file z3py.py.
9249 """Floating-point 32-bit (single) sort."""
◆ ForAll()
| def z3py.ForAll |
( |
|
vs, |
|
|
|
body, |
|
|
|
weight = 1, |
|
|
|
qid = "", |
|
|
|
skid = "", |
|
|
|
patterns = [], |
|
|
|
no_patterns = [] |
|
) |
| |
Create a Z3 forall formula.
The parameters `weight`, `qid`, `skid`, `patterns` and `no_patterns` are optional annotations.
>>> f = Function('f', IntSort(), IntSort(), IntSort())
>>> x = Int('x')
>>> y = Int('y')
>>> ForAll([x, y], f(x, y) >= x)
ForAll([x, y], f(x, y) >= x)
>>> ForAll([x, y], f(x, y) >= x, patterns=[ f(x, y) ])
ForAll([x, y], f(x, y) >= x)
>>> ForAll([x, y], f(x, y) >= x, weight=10)
ForAll([x, y], f(x, y) >= x)
Definition at line 2187 of file z3py.py.
2187 def ForAll(vs, body, weight=1, qid="", skid="", patterns=[], no_patterns=[]):
2188 """Create a Z3 forall formula.
2190 The parameters `weight`, `qid`, `skid`, `patterns` and `no_patterns` are optional annotations.
2192 >>> f = Function('f', IntSort(), IntSort(), IntSort())
2195 >>> ForAll([x, y], f(x, y) >= x)
2196 ForAll([x, y], f(x, y) >= x)
2197 >>> ForAll([x, y], f(x, y) >= x, patterns=[ f(x, y) ])
2198 ForAll([x, y], f(x, y) >= x)
2199 >>> ForAll([x, y], f(x, y) >= x, weight=10)
2200 ForAll([x, y], f(x, y) >= x)
2202 return _mk_quantifier(
True, vs, body, weight, qid, skid, patterns, no_patterns)
Referenced by Fixedpoint.abstract().
◆ FP()
| def z3py.FP |
( |
|
name, |
|
|
|
fpsort, |
|
|
|
ctx = None |
|
) |
| |
Return a floating-point constant named `name`.
`fpsort` is the floating-point sort.
If `ctx=None`, then the global context is used.
>>> x = FP('x', FPSort(8, 24))
>>> is_fp(x)
True
>>> x.ebits()
8
>>> x.sort()
FPSort(8, 24)
>>> word = FPSort(8, 24)
>>> x2 = FP('x', word)
>>> eq(x, x2)
True
Definition at line 9898 of file z3py.py.
9898 def FP(name, fpsort, ctx=None):
9899 """Return a floating-point constant named `name`.
9900 `fpsort` is the floating-point sort.
9901 If `ctx=None`, then the global context is used.
9903 >>> x = FP('x', FPSort(8, 24))
9910 >>> word = FPSort(8, 24)
9911 >>> x2 = FP('x', word)
9915 if isinstance(fpsort, FPSortRef)
and ctx
is None:
Referenced by FPs().
◆ fpAbs()
| def z3py.fpAbs |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point absolute value expression.
>>> s = FPSort(8, 24)
>>> rm = RNE()
>>> x = FPVal(1.0, s)
>>> fpAbs(x)
fpAbs(1)
>>> y = FPVal(-20.0, s)
>>> y
-1.25*(2**4)
>>> fpAbs(y)
fpAbs(-1.25*(2**4))
>>> fpAbs(-1.25*(2**4))
fpAbs(-1.25*(2**4))
>>> fpAbs(x).sort()
FPSort(8, 24)
Definition at line 9941 of file z3py.py.
9941 def fpAbs(a, ctx=None):
9942 """Create a Z3 floating-point absolute value expression.
9944 >>> s = FPSort(8, 24)
9946 >>> x = FPVal(1.0, s)
9949 >>> y = FPVal(-20.0, s)
9954 >>> fpAbs(-1.25*(2**4))
9960 [a] = _coerce_fp_expr_list([a], ctx)
◆ fpAdd()
| def z3py.fpAdd |
( |
|
rm, |
|
|
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point addition expression.
>>> s = FPSort(8, 24)
>>> rm = RNE()
>>> x = FP('x', s)
>>> y = FP('y', s)
>>> fpAdd(rm, x, y)
fpAdd(RNE(), x, y)
>>> fpAdd(RTZ(), x, y) # default rounding mode is RTZ
x + y
>>> fpAdd(rm, x, y).sort()
FPSort(8, 24)
Definition at line 10032 of file z3py.py.
10032 def fpAdd(rm, a, b, ctx=None):
10033 """Create a Z3 floating-point addition expression.
10035 >>> s = FPSort(8, 24)
10039 >>> fpAdd(rm, x, y)
10041 >>> fpAdd(RTZ(), x, y) # default rounding mode is RTZ
10043 >>> fpAdd(rm, x, y).sort()
10046 return _mk_fp_bin(Z3_mk_fpa_add, rm, a, b, ctx)
Referenced by FPRef.__add__(), and FPRef.__radd__().
◆ fpBVToFP()
| def z3py.fpBVToFP |
( |
|
v, |
|
|
|
sort, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression that represents the
conversion from a bit-vector term to a floating-point term.
>>> x_bv = BitVecVal(0x3F800000, 32)
>>> x_fp = fpBVToFP(x_bv, Float32())
>>> x_fp
fpToFP(1065353216)
>>> simplify(x_fp)
1
Definition at line 10354 of file z3py.py.
10355 """Create a Z3 floating-point conversion expression that represents the
10356 conversion from a bit-vector term to a floating-point term.
10358 >>> x_bv = BitVecVal(0x3F800000, 32)
10359 >>> x_fp = fpBVToFP(x_bv, Float32())
10365 _z3_assert(
is_bv(v),
"First argument must be a Z3 bit-vector expression")
10366 _z3_assert(
is_fp_sort(sort),
"Second argument must be a Z3 floating-point sort.")
10367 ctx = _get_ctx(ctx)
◆ fpDiv()
| def z3py.fpDiv |
( |
|
rm, |
|
|
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point division expression.
>>> s = FPSort(8, 24)
>>> rm = RNE()
>>> x = FP('x', s)
>>> y = FP('y', s)
>>> fpDiv(rm, x, y)
fpDiv(RNE(), x, y)
>>> fpDiv(rm, x, y).sort()
FPSort(8, 24)
Definition at line 10079 of file z3py.py.
10079 def fpDiv(rm, a, b, ctx=None):
10080 """Create a Z3 floating-point division expression.
10082 >>> s = FPSort(8, 24)
10086 >>> fpDiv(rm, x, y)
10088 >>> fpDiv(rm, x, y).sort()
10091 return _mk_fp_bin(Z3_mk_fpa_div, rm, a, b, ctx)
Referenced by FPRef.__div__(), and FPRef.__rdiv__().
◆ fpEQ()
| def z3py.fpEQ |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create the Z3 floating-point expression `fpEQ(other, self)`.
>>> x, y = FPs('x y', FPSort(8, 24))
>>> fpEQ(x, y)
fpEQ(x, y)
>>> fpEQ(x, y).sexpr()
'(fp.eq x y)'
Definition at line 10262 of file z3py.py.
10262 def fpEQ(a, b, ctx=None):
10263 """Create the Z3 floating-point expression `fpEQ(other, self)`.
10265 >>> x, y = FPs('x y', FPSort(8, 24))
10268 >>> fpEQ(x, y).sexpr()
10271 return _mk_fp_bin_pred(Z3_mk_fpa_eq, a, b, ctx)
Referenced by fpNEQ().
◆ fpFMA()
| def z3py.fpFMA |
( |
|
rm, |
|
|
|
a, |
|
|
|
b, |
|
|
|
c, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point fused multiply-add expression.
Definition at line 10138 of file z3py.py.
10138 def fpFMA(rm, a, b, c, ctx=None):
10139 """Create a Z3 floating-point fused multiply-add expression.
10141 return _mk_fp_tern(Z3_mk_fpa_fma, rm, a, b, c, ctx)
◆ fpFP()
| def z3py.fpFP |
( |
|
sgn, |
|
|
|
exp, |
|
|
|
sig, |
|
|
|
ctx = None |
|
) |
| |
Create the Z3 floating-point value `fpFP(sgn, sig, exp)` from the three bit-vectors sgn, sig, and exp.
>>> s = FPSort(8, 24)
>>> x = fpFP(BitVecVal(1, 1), BitVecVal(2**7-1, 8), BitVecVal(2**22, 23))
>>> print(x)
fpFP(1, 127, 4194304)
>>> xv = FPVal(-1.5, s)
>>> print(xv)
-1.5
>>> slvr = Solver()
>>> slvr.add(fpEQ(x, xv))
>>> slvr.check()
sat
>>> xv = FPVal(+1.5, s)
>>> print(xv)
1.5
>>> slvr = Solver()
>>> slvr.add(fpEQ(x, xv))
>>> slvr.check()
unsat
Definition at line 10286 of file z3py.py.
10286 def fpFP(sgn, exp, sig, ctx=None):
10287 """Create the Z3 floating-point value `fpFP(sgn, sig, exp)` from the three bit-vectors sgn, sig, and exp.
10289 >>> s = FPSort(8, 24)
10290 >>> x = fpFP(BitVecVal(1, 1), BitVecVal(2**7-1, 8), BitVecVal(2**22, 23))
10292 fpFP(1, 127, 4194304)
10293 >>> xv = FPVal(-1.5, s)
10296 >>> slvr = Solver()
10297 >>> slvr.add(fpEQ(x, xv))
10300 >>> xv = FPVal(+1.5, s)
10303 >>> slvr = Solver()
10304 >>> slvr.add(fpEQ(x, xv))
10308 _z3_assert(
is_bv(sgn)
and is_bv(exp)
and is_bv(sig),
"sort mismatch")
10309 _z3_assert(sgn.sort().size() == 1,
"sort mismatch")
10310 ctx = _get_ctx(ctx)
10311 _z3_assert(ctx == sgn.ctx == exp.ctx == sig.ctx,
"context mismatch")
10312 return FPRef(
Z3_mk_fpa_fp(ctx.ref(), sgn.ast, exp.ast, sig.ast), ctx)
◆ fpFPToFP()
| def z3py.fpFPToFP |
( |
|
rm, |
|
|
|
v, |
|
|
|
sort, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression that represents the
conversion from a floating-point term to a floating-point term of different precision.
>>> x_sgl = FPVal(1.0, Float32())
>>> x_dbl = fpFPToFP(RNE(), x_sgl, Float64())
>>> x_dbl
fpToFP(RNE(), 1)
>>> simplify(x_dbl)
1
>>> x_dbl.sort()
FPSort(11, 53)
Definition at line 10371 of file z3py.py.
10371 def fpFPToFP(rm, v, sort, ctx=None):
10372 """Create a Z3 floating-point conversion expression that represents the
10373 conversion from a floating-point term to a floating-point term of different precision.
10375 >>> x_sgl = FPVal(1.0, Float32())
10376 >>> x_dbl = fpFPToFP(RNE(), x_sgl, Float64())
10379 >>> simplify(x_dbl)
10384 _z3_assert(
is_fprm(rm),
"First argument must be a Z3 floating-point rounding mode expression.")
10385 _z3_assert(
is_fp(v),
"Second argument must be a Z3 floating-point expression.")
10386 _z3_assert(
is_fp_sort(sort),
"Third argument must be a Z3 floating-point sort.")
10387 ctx = _get_ctx(ctx)
◆ fpGEQ()
| def z3py.fpGEQ |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create the Z3 floating-point expression `other >= self`.
>>> x, y = FPs('x y', FPSort(8, 24))
>>> fpGEQ(x, y)
x >= y
>>> (x >= y).sexpr()
'(fp.geq x y)'
Definition at line 10250 of file z3py.py.
10250 def fpGEQ(a, b, ctx=None):
10251 """Create the Z3 floating-point expression `other >= self`.
10253 >>> x, y = FPs('x y', FPSort(8, 24))
10256 >>> (x >= y).sexpr()
10259 return _mk_fp_bin_pred(Z3_mk_fpa_geq, a, b, ctx)
Referenced by FPRef.__ge__().
◆ fpGT()
| def z3py.fpGT |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create the Z3 floating-point expression `other > self`.
>>> x, y = FPs('x y', FPSort(8, 24))
>>> fpGT(x, y)
x > y
>>> (x > y).sexpr()
'(fp.gt x y)'
Definition at line 10238 of file z3py.py.
10238 def fpGT(a, b, ctx=None):
10239 """Create the Z3 floating-point expression `other > self`.
10241 >>> x, y = FPs('x y', FPSort(8, 24))
10244 >>> (x > y).sexpr()
10247 return _mk_fp_bin_pred(Z3_mk_fpa_gt, a, b, ctx)
Referenced by FPRef.__gt__().
◆ fpInfinity()
| def z3py.fpInfinity |
( |
|
s, |
|
|
|
negative |
|
) |
| |
Create a Z3 floating-point +oo or -oo term.
Definition at line 9826 of file z3py.py.
9827 """Create a Z3 floating-point +oo or -oo term."""
9828 _z3_assert(isinstance(s, FPSortRef),
"sort mismatch")
9829 _z3_assert(isinstance(negative, bool),
"expected Boolean flag")
9830 return FPNumRef(
Z3_mk_fpa_inf(s.ctx_ref(), s.ast, negative), s.ctx)
◆ fpIsInf()
| def z3py.fpIsInf |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point isInfinite expression.
>>> s = FPSort(8, 24)
>>> x = FP('x', s)
>>> fpIsInf(x)
fpIsInf(x)
Definition at line 10168 of file z3py.py.
10169 """Create a Z3 floating-point isInfinite expression.
10171 >>> s = FPSort(8, 24)
10176 return _mk_fp_unary_pred(Z3_mk_fpa_is_infinite, a, ctx)
◆ fpIsNaN()
| def z3py.fpIsNaN |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point isNaN expression.
>>> s = FPSort(8, 24)
>>> x = FP('x', s)
>>> y = FP('y', s)
>>> fpIsNaN(x)
fpIsNaN(x)
Definition at line 10156 of file z3py.py.
10157 """Create a Z3 floating-point isNaN expression.
10159 >>> s = FPSort(8, 24)
10165 return _mk_fp_unary_pred(Z3_mk_fpa_is_nan, a, ctx)
◆ fpIsNegative()
| def z3py.fpIsNegative |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point isNegative expression.
Definition at line 10197 of file z3py.py.
10198 """Create a Z3 floating-point isNegative expression.
10200 return _mk_fp_unary_pred(Z3_mk_fpa_is_negative, a, ctx)
◆ fpIsNormal()
| def z3py.fpIsNormal |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point isNormal expression.
Definition at line 10185 of file z3py.py.
10186 """Create a Z3 floating-point isNormal expression.
10188 return _mk_fp_unary_pred(Z3_mk_fpa_is_normal, a, ctx)
◆ fpIsPositive()
| def z3py.fpIsPositive |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point isPositive expression.
Definition at line 10203 of file z3py.py.
10204 """Create a Z3 floating-point isPositive expression.
10206 return _mk_fp_unary_pred(Z3_mk_fpa_is_positive, a, ctx)
◆ fpIsSubnormal()
| def z3py.fpIsSubnormal |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point isSubnormal expression.
Definition at line 10191 of file z3py.py.
10192 """Create a Z3 floating-point isSubnormal expression.
10194 return _mk_fp_unary_pred(Z3_mk_fpa_is_subnormal, a, ctx)
◆ fpIsZero()
| def z3py.fpIsZero |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point isZero expression.
Definition at line 10179 of file z3py.py.
10180 """Create a Z3 floating-point isZero expression.
10182 return _mk_fp_unary_pred(Z3_mk_fpa_is_zero, a, ctx)
◆ fpLEQ()
| def z3py.fpLEQ |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create the Z3 floating-point expression `other <= self`.
>>> x, y = FPs('x y', FPSort(8, 24))
>>> fpLEQ(x, y)
x <= y
>>> (x <= y).sexpr()
'(fp.leq x y)'
Definition at line 10226 of file z3py.py.
10226 def fpLEQ(a, b, ctx=None):
10227 """Create the Z3 floating-point expression `other <= self`.
10229 >>> x, y = FPs('x y', FPSort(8, 24))
10232 >>> (x <= y).sexpr()
10235 return _mk_fp_bin_pred(Z3_mk_fpa_leq, a, b, ctx)
Referenced by FPRef.__le__().
◆ fpLT()
| def z3py.fpLT |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create the Z3 floating-point expression `other < self`.
>>> x, y = FPs('x y', FPSort(8, 24))
>>> fpLT(x, y)
x < y
>>> (x < y).sexpr()
'(fp.lt x y)'
Definition at line 10214 of file z3py.py.
10214 def fpLT(a, b, ctx=None):
10215 """Create the Z3 floating-point expression `other < self`.
10217 >>> x, y = FPs('x y', FPSort(8, 24))
10220 >>> (x < y).sexpr()
10223 return _mk_fp_bin_pred(Z3_mk_fpa_lt, a, b, ctx)
Referenced by FPRef.__lt__().
◆ fpMax()
| def z3py.fpMax |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point maximum expression.
>>> s = FPSort(8, 24)
>>> rm = RNE()
>>> x = FP('x', s)
>>> y = FP('y', s)
>>> fpMax(x, y)
fpMax(x, y)
>>> fpMax(x, y).sort()
FPSort(8, 24)
Definition at line 10123 of file z3py.py.
10123 def fpMax(a, b, ctx=None):
10124 """Create a Z3 floating-point maximum expression.
10126 >>> s = FPSort(8, 24)
10132 >>> fpMax(x, y).sort()
10135 return _mk_fp_bin_norm(Z3_mk_fpa_max, a, b, ctx)
◆ fpMin()
| def z3py.fpMin |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point minimum expression.
>>> s = FPSort(8, 24)
>>> rm = RNE()
>>> x = FP('x', s)
>>> y = FP('y', s)
>>> fpMin(x, y)
fpMin(x, y)
>>> fpMin(x, y).sort()
FPSort(8, 24)
Definition at line 10108 of file z3py.py.
10108 def fpMin(a, b, ctx=None):
10109 """Create a Z3 floating-point minimum expression.
10111 >>> s = FPSort(8, 24)
10117 >>> fpMin(x, y).sort()
10120 return _mk_fp_bin_norm(Z3_mk_fpa_min, a, b, ctx)
◆ fpMinusInfinity()
| def z3py.fpMinusInfinity |
( |
|
s | ) |
|
Create a Z3 floating-point -oo term.
Definition at line 9820 of file z3py.py.
9821 """Create a Z3 floating-point -oo term."""
9822 _z3_assert(isinstance(s, FPSortRef),
"sort mismatch")
9823 return FPNumRef(
Z3_mk_fpa_inf(s.ctx_ref(), s.ast,
True), s.ctx)
Referenced by FPVal().
◆ fpMinusZero()
| def z3py.fpMinusZero |
( |
|
s | ) |
|
Create a Z3 floating-point -0.0 term.
Definition at line 9839 of file z3py.py.
9840 """Create a Z3 floating-point -0.0 term."""
9841 _z3_assert(isinstance(s, FPSortRef),
"sort mismatch")
Referenced by FPVal().
◆ fpMul()
| def z3py.fpMul |
( |
|
rm, |
|
|
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point multiplication expression.
>>> s = FPSort(8, 24)
>>> rm = RNE()
>>> x = FP('x', s)
>>> y = FP('y', s)
>>> fpMul(rm, x, y)
fpMul(RNE(), x, y)
>>> fpMul(rm, x, y).sort()
FPSort(8, 24)
Definition at line 10064 of file z3py.py.
10064 def fpMul(rm, a, b, ctx=None):
10065 """Create a Z3 floating-point multiplication expression.
10067 >>> s = FPSort(8, 24)
10071 >>> fpMul(rm, x, y)
10073 >>> fpMul(rm, x, y).sort()
10076 return _mk_fp_bin(Z3_mk_fpa_mul, rm, a, b, ctx)
Referenced by FPRef.__mul__(), and FPRef.__rmul__().
◆ fpNaN()
Create a Z3 floating-point NaN term.
>>> s = FPSort(8, 24)
>>> set_fpa_pretty(True)
>>> fpNaN(s)
NaN
>>> pb = get_fpa_pretty()
>>> set_fpa_pretty(False)
>>> fpNaN(s)
fpNaN(FPSort(8, 24))
>>> set_fpa_pretty(pb)
Definition at line 9786 of file z3py.py.
9787 """Create a Z3 floating-point NaN term.
9789 >>> s = FPSort(8, 24)
9790 >>> set_fpa_pretty(True)
9793 >>> pb = get_fpa_pretty()
9794 >>> set_fpa_pretty(False)
9796 fpNaN(FPSort(8, 24))
9797 >>> set_fpa_pretty(pb)
9799 _z3_assert(isinstance(s, FPSortRef),
"sort mismatch")
Referenced by FPVal().
◆ fpNeg()
| def z3py.fpNeg |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point addition expression.
>>> s = FPSort(8, 24)
>>> rm = RNE()
>>> x = FP('x', s)
>>> fpNeg(x)
-x
>>> fpNeg(x).sort()
FPSort(8, 24)
Definition at line 9964 of file z3py.py.
9964 def fpNeg(a, ctx=None):
9965 """Create a Z3 floating-point addition expression.
9967 >>> s = FPSort(8, 24)
9976 [a] = _coerce_fp_expr_list([a], ctx)
Referenced by FPRef.__neg__().
◆ fpNEQ()
| def z3py.fpNEQ |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create the Z3 floating-point expression `Not(fpEQ(other, self))`.
>>> x, y = FPs('x y', FPSort(8, 24))
>>> fpNEQ(x, y)
Not(fpEQ(x, y))
>>> (x != y).sexpr()
'(distinct x y)'
Definition at line 10274 of file z3py.py.
10274 def fpNEQ(a, b, ctx=None):
10275 """Create the Z3 floating-point expression `Not(fpEQ(other, self))`.
10277 >>> x, y = FPs('x y', FPSort(8, 24))
10280 >>> (x != y).sexpr()
◆ fpPlusInfinity()
| def z3py.fpPlusInfinity |
( |
|
s | ) |
|
Create a Z3 floating-point +oo term.
>>> s = FPSort(8, 24)
>>> pb = get_fpa_pretty()
>>> set_fpa_pretty(True)
>>> fpPlusInfinity(s)
+oo
>>> set_fpa_pretty(False)
>>> fpPlusInfinity(s)
fpPlusInfinity(FPSort(8, 24))
>>> set_fpa_pretty(pb)
Definition at line 9803 of file z3py.py.
9804 """Create a Z3 floating-point +oo term.
9806 >>> s = FPSort(8, 24)
9807 >>> pb = get_fpa_pretty()
9808 >>> set_fpa_pretty(True)
9809 >>> fpPlusInfinity(s)
9811 >>> set_fpa_pretty(False)
9812 >>> fpPlusInfinity(s)
9813 fpPlusInfinity(FPSort(8, 24))
9814 >>> set_fpa_pretty(pb)
9816 _z3_assert(isinstance(s, FPSortRef),
"sort mismatch")
9817 return FPNumRef(
Z3_mk_fpa_inf(s.ctx_ref(), s.ast,
False), s.ctx)
Referenced by FPVal().
◆ fpPlusZero()
Create a Z3 floating-point +0.0 term.
Definition at line 9833 of file z3py.py.
9834 """Create a Z3 floating-point +0.0 term."""
9835 _z3_assert(isinstance(s, FPSortRef),
"sort mismatch")
9836 return FPNumRef(
Z3_mk_fpa_zero(s.ctx_ref(), s.ast,
False), s.ctx)
Referenced by FPVal().
◆ fpRealToFP()
| def z3py.fpRealToFP |
( |
|
rm, |
|
|
|
v, |
|
|
|
sort, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression that represents the
conversion from a real term to a floating-point term.
>>> x_r = RealVal(1.5)
>>> x_fp = fpRealToFP(RNE(), x_r, Float32())
>>> x_fp
fpToFP(RNE(), 3/2)
>>> simplify(x_fp)
1.5
Definition at line 10391 of file z3py.py.
10392 """Create a Z3 floating-point conversion expression that represents the
10393 conversion from a real term to a floating-point term.
10395 >>> x_r = RealVal(1.5)
10396 >>> x_fp = fpRealToFP(RNE(), x_r, Float32())
10402 _z3_assert(
is_fprm(rm),
"First argument must be a Z3 floating-point rounding mode expression.")
10403 _z3_assert(
is_real(v),
"Second argument must be a Z3 expression or real sort.")
10404 _z3_assert(
is_fp_sort(sort),
"Third argument must be a Z3 floating-point sort.")
10405 ctx = _get_ctx(ctx)
◆ fpRem()
| def z3py.fpRem |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point remainder expression.
>>> s = FPSort(8, 24)
>>> x = FP('x', s)
>>> y = FP('y', s)
>>> fpRem(x, y)
fpRem(x, y)
>>> fpRem(x, y).sort()
FPSort(8, 24)
Definition at line 10094 of file z3py.py.
10094 def fpRem(a, b, ctx=None):
10095 """Create a Z3 floating-point remainder expression.
10097 >>> s = FPSort(8, 24)
10102 >>> fpRem(x, y).sort()
10105 return _mk_fp_bin_norm(Z3_mk_fpa_rem, a, b, ctx)
Referenced by FPRef.__mod__(), and FPRef.__rmod__().
◆ fpRoundToIntegral()
| def z3py.fpRoundToIntegral |
( |
|
rm, |
|
|
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point roundToIntegral expression.
Definition at line 10150 of file z3py.py.
10151 """Create a Z3 floating-point roundToIntegral expression.
10153 return _mk_fp_unary(Z3_mk_fpa_round_to_integral, rm, a, ctx)
◆ FPs()
| def z3py.FPs |
( |
|
names, |
|
|
|
fpsort, |
|
|
|
ctx = None |
|
) |
| |
Return an array of floating-point constants.
>>> x, y, z = FPs('x y z', FPSort(8, 24))
>>> x.sort()
FPSort(8, 24)
>>> x.sbits()
24
>>> x.ebits()
8
>>> fpMul(RNE(), fpAdd(RNE(), x, y), z)
fpMul(RNE(), fpAdd(RNE(), x, y), z)
Definition at line 9922 of file z3py.py.
9922 def FPs(names, fpsort, ctx=None):
9923 """Return an array of floating-point constants.
9925 >>> x, y, z = FPs('x y z', FPSort(8, 24))
9932 >>> fpMul(RNE(), fpAdd(RNE(), x, y), z)
9933 fpMul(RNE(), fpAdd(RNE(), x, y), z)
9936 if isinstance(names, str):
9937 names = names.split(
" ")
9938 return [
FP(name, fpsort, ctx)
for name
in names]
◆ fpSignedToFP()
| def z3py.fpSignedToFP |
( |
|
rm, |
|
|
|
v, |
|
|
|
sort, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression that represents the
conversion from a signed bit-vector term (encoding an integer) to a floating-point term.
>>> x_signed = BitVecVal(-5, BitVecSort(32))
>>> x_fp = fpSignedToFP(RNE(), x_signed, Float32())
>>> x_fp
fpToFP(RNE(), 4294967291)
>>> simplify(x_fp)
-1.25*(2**2)
Definition at line 10409 of file z3py.py.
10410 """Create a Z3 floating-point conversion expression that represents the
10411 conversion from a signed bit-vector term (encoding an integer) to a floating-point term.
10413 >>> x_signed = BitVecVal(-5, BitVecSort(32))
10414 >>> x_fp = fpSignedToFP(RNE(), x_signed, Float32())
10416 fpToFP(RNE(), 4294967291)
10420 _z3_assert(
is_fprm(rm),
"First argument must be a Z3 floating-point rounding mode expression.")
10421 _z3_assert(
is_bv(v),
"Second argument must be a Z3 bit-vector expression")
10422 _z3_assert(
is_fp_sort(sort),
"Third argument must be a Z3 floating-point sort.")
10423 ctx = _get_ctx(ctx)
◆ FPSort()
| def z3py.FPSort |
( |
|
ebits, |
|
|
|
sbits, |
|
|
|
ctx = None |
|
) |
| |
Return a Z3 floating-point sort of the given sizes. If `ctx=None`, then the global context is used.
>>> Single = FPSort(8, 24)
>>> Double = FPSort(11, 53)
>>> Single
FPSort(8, 24)
>>> x = Const('x', Single)
>>> eq(x, FP('x', FPSort(8, 24)))
True
Definition at line 9727 of file z3py.py.
9727 def FPSort(ebits, sbits, ctx=None):
9728 """Return a Z3 floating-point sort of the given sizes. If `ctx=None`, then the global context is used.
9730 >>> Single = FPSort(8, 24)
9731 >>> Double = FPSort(11, 53)
9734 >>> x = Const('x', Single)
9735 >>> eq(x, FP('x', FPSort(8, 24)))
Referenced by get_default_fp_sort().
◆ fpSqrt()
| def z3py.fpSqrt |
( |
|
rm, |
|
|
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point square root expression.
Definition at line 10144 of file z3py.py.
10144 def fpSqrt(rm, a, ctx=None):
10145 """Create a Z3 floating-point square root expression.
10147 return _mk_fp_unary(Z3_mk_fpa_sqrt, rm, a, ctx)
◆ fpSub()
| def z3py.fpSub |
( |
|
rm, |
|
|
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point subtraction expression.
>>> s = FPSort(8, 24)
>>> rm = RNE()
>>> x = FP('x', s)
>>> y = FP('y', s)
>>> fpSub(rm, x, y)
fpSub(RNE(), x, y)
>>> fpSub(rm, x, y).sort()
FPSort(8, 24)
Definition at line 10049 of file z3py.py.
10049 def fpSub(rm, a, b, ctx=None):
10050 """Create a Z3 floating-point subtraction expression.
10052 >>> s = FPSort(8, 24)
10056 >>> fpSub(rm, x, y)
10058 >>> fpSub(rm, x, y).sort()
10061 return _mk_fp_bin(Z3_mk_fpa_sub, rm, a, b, ctx)
Referenced by FPRef.__rsub__(), and FPRef.__sub__().
◆ fpToFP()
| def z3py.fpToFP |
( |
|
a1, |
|
|
|
a2 = None, |
|
|
|
a3 = None, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression from other term sorts
to floating-point.
From a bit-vector term in IEEE 754-2008 format:
>>> x = FPVal(1.0, Float32())
>>> x_bv = fpToIEEEBV(x)
>>> simplify(fpToFP(x_bv, Float32()))
1
From a floating-point term with different precision:
>>> x = FPVal(1.0, Float32())
>>> x_db = fpToFP(RNE(), x, Float64())
>>> x_db.sort()
FPSort(11, 53)
From a real term:
>>> x_r = RealVal(1.5)
>>> simplify(fpToFP(RNE(), x_r, Float32()))
1.5
From a signed bit-vector term:
>>> x_signed = BitVecVal(-5, BitVecSort(32))
>>> simplify(fpToFP(RNE(), x_signed, Float32()))
-1.25*(2**2)
Definition at line 10315 of file z3py.py.
10315 def fpToFP(a1, a2=None, a3=None, ctx=None):
10316 """Create a Z3 floating-point conversion expression from other term sorts
10319 From a bit-vector term in IEEE 754-2008 format:
10320 >>> x = FPVal(1.0, Float32())
10321 >>> x_bv = fpToIEEEBV(x)
10322 >>> simplify(fpToFP(x_bv, Float32()))
10325 From a floating-point term with different precision:
10326 >>> x = FPVal(1.0, Float32())
10327 >>> x_db = fpToFP(RNE(), x, Float64())
10332 >>> x_r = RealVal(1.5)
10333 >>> simplify(fpToFP(RNE(), x_r, Float32()))
10336 From a signed bit-vector term:
10337 >>> x_signed = BitVecVal(-5, BitVecSort(32))
10338 >>> simplify(fpToFP(RNE(), x_signed, Float32()))
10341 ctx = _get_ctx(ctx)
10351 raise Z3Exception(
"Unsupported combination of arguments for conversion to floating-point term.")
◆ fpToFPUnsigned()
| def z3py.fpToFPUnsigned |
( |
|
rm, |
|
|
|
x, |
|
|
|
s, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression, from unsigned bit-vector to floating-point expression.
Definition at line 10445 of file z3py.py.
10446 """Create a Z3 floating-point conversion expression, from unsigned bit-vector to floating-point expression."""
10448 _z3_assert(
is_fprm(rm),
"First argument must be a Z3 floating-point rounding mode expression")
10449 _z3_assert(
is_bv(x),
"Second argument must be a Z3 bit-vector expression")
10450 _z3_assert(
is_fp_sort(s),
"Third argument must be Z3 floating-point sort")
10451 ctx = _get_ctx(ctx)
◆ fpToIEEEBV()
| def z3py.fpToIEEEBV |
( |
|
x, |
|
|
|
ctx = None |
|
) |
| |
\brief 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 representation of
that NaN.
>>> x = FP('x', FPSort(8, 24))
>>> y = fpToIEEEBV(x)
>>> print(is_fp(x))
True
>>> print(is_bv(y))
True
>>> print(is_fp(y))
False
>>> print(is_bv(x))
False
Definition at line 10519 of file z3py.py.
10520 """\brief Conversion of a floating-point term into a bit-vector term in IEEE 754-2008 format.
10522 The size of the resulting bit-vector is automatically determined.
10524 Note that IEEE 754-2008 allows multiple different representations of NaN. This conversion
10525 knows only one NaN and it will always produce the same bit-vector representation of
10528 >>> x = FP('x', FPSort(8, 24))
10529 >>> y = fpToIEEEBV(x)
10530 >>> print(is_fp(x))
10532 >>> print(is_bv(y))
10534 >>> print(is_fp(y))
10536 >>> print(is_bv(x))
10540 _z3_assert(
is_fp(x),
"First argument must be a Z3 floating-point expression")
10541 ctx = _get_ctx(ctx)
◆ fpToReal()
| def z3py.fpToReal |
( |
|
x, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression, from floating-point expression to real.
>>> x = FP('x', FPSort(8, 24))
>>> y = fpToReal(x)
>>> print(is_fp(x))
True
>>> print(is_real(y))
True
>>> print(is_fp(y))
False
>>> print(is_real(x))
False
Definition at line 10499 of file z3py.py.
10500 """Create a Z3 floating-point conversion expression, from floating-point expression to real.
10502 >>> x = FP('x', FPSort(8, 24))
10503 >>> y = fpToReal(x)
10504 >>> print(is_fp(x))
10506 >>> print(is_real(y))
10508 >>> print(is_fp(y))
10510 >>> print(is_real(x))
10514 _z3_assert(
is_fp(x),
"First argument must be a Z3 floating-point expression")
10515 ctx = _get_ctx(ctx)
◆ fpToSBV()
| def z3py.fpToSBV |
( |
|
rm, |
|
|
|
x, |
|
|
|
s, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression, from floating-point expression to signed bit-vector.
>>> x = FP('x', FPSort(8, 24))
>>> y = fpToSBV(RTZ(), x, BitVecSort(32))
>>> print(is_fp(x))
True
>>> print(is_bv(y))
True
>>> print(is_fp(y))
False
>>> print(is_bv(x))
False
Definition at line 10455 of file z3py.py.
10455 def fpToSBV(rm, x, s, ctx=None):
10456 """Create a Z3 floating-point conversion expression, from floating-point expression to signed bit-vector.
10458 >>> x = FP('x', FPSort(8, 24))
10459 >>> y = fpToSBV(RTZ(), x, BitVecSort(32))
10460 >>> print(is_fp(x))
10462 >>> print(is_bv(y))
10464 >>> print(is_fp(y))
10466 >>> print(is_bv(x))
10470 _z3_assert(
is_fprm(rm),
"First argument must be a Z3 floating-point rounding mode expression")
10471 _z3_assert(
is_fp(x),
"Second argument must be a Z3 floating-point expression")
10472 _z3_assert(
is_bv_sort(s),
"Third argument must be Z3 bit-vector sort")
10473 ctx = _get_ctx(ctx)
10474 return BitVecRef(
Z3_mk_fpa_to_sbv(ctx.ref(), rm.ast, x.ast, s.size()), ctx)
◆ fpToUBV()
| def z3py.fpToUBV |
( |
|
rm, |
|
|
|
x, |
|
|
|
s, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression, from floating-point expression to unsigned bit-vector.
>>> x = FP('x', FPSort(8, 24))
>>> y = fpToUBV(RTZ(), x, BitVecSort(32))
>>> print(is_fp(x))
True
>>> print(is_bv(y))
True
>>> print(is_fp(y))
False
>>> print(is_bv(x))
False
Definition at line 10477 of file z3py.py.
10477 def fpToUBV(rm, x, s, ctx=None):
10478 """Create a Z3 floating-point conversion expression, from floating-point expression to unsigned bit-vector.
10480 >>> x = FP('x', FPSort(8, 24))
10481 >>> y = fpToUBV(RTZ(), x, BitVecSort(32))
10482 >>> print(is_fp(x))
10484 >>> print(is_bv(y))
10486 >>> print(is_fp(y))
10488 >>> print(is_bv(x))
10492 _z3_assert(
is_fprm(rm),
"First argument must be a Z3 floating-point rounding mode expression")
10493 _z3_assert(
is_fp(x),
"Second argument must be a Z3 floating-point expression")
10494 _z3_assert(
is_bv_sort(s),
"Third argument must be Z3 bit-vector sort")
10495 ctx = _get_ctx(ctx)
10496 return BitVecRef(
Z3_mk_fpa_to_ubv(ctx.ref(), rm.ast, x.ast, s.size()), ctx)
◆ fpUnsignedToFP()
| def z3py.fpUnsignedToFP |
( |
|
rm, |
|
|
|
v, |
|
|
|
sort, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 floating-point conversion expression that represents the
conversion from an unsigned bit-vector term (encoding an integer) to a floating-point term.
>>> x_signed = BitVecVal(-5, BitVecSort(32))
>>> x_fp = fpUnsignedToFP(RNE(), x_signed, Float32())
>>> x_fp
fpToFPUnsigned(RNE(), 4294967291)
>>> simplify(x_fp)
1*(2**32)
Definition at line 10427 of file z3py.py.
10428 """Create a Z3 floating-point conversion expression that represents the
10429 conversion from an unsigned bit-vector term (encoding an integer) to a floating-point term.
10431 >>> x_signed = BitVecVal(-5, BitVecSort(32))
10432 >>> x_fp = fpUnsignedToFP(RNE(), x_signed, Float32())
10434 fpToFPUnsigned(RNE(), 4294967291)
10438 _z3_assert(
is_fprm(rm),
"First argument must be a Z3 floating-point rounding mode expression.")
10439 _z3_assert(
is_bv(v),
"Second argument must be a Z3 bit-vector expression")
10440 _z3_assert(
is_fp_sort(sort),
"Third argument must be a Z3 floating-point sort.")
10441 ctx = _get_ctx(ctx)
◆ FPVal()
| def z3py.FPVal |
( |
|
sig, |
|
|
|
exp = None, |
|
|
|
fps = None, |
|
|
|
ctx = None |
|
) |
| |
Return a floating-point value of value `val` and sort `fps`.
If `ctx=None`, then the global context is used.
>>> v = FPVal(20.0, FPSort(8, 24))
>>> v
1.25*(2**4)
>>> print("0x%.8x" % v.exponent_as_long(False))
0x00000004
>>> v = FPVal(2.25, FPSort(8, 24))
>>> v
1.125*(2**1)
>>> v = FPVal(-2.25, FPSort(8, 24))
>>> v
-1.125*(2**1)
>>> FPVal(-0.0, FPSort(8, 24))
-0.0
>>> FPVal(0.0, FPSort(8, 24))
+0.0
>>> FPVal(+0.0, FPSort(8, 24))
+0.0
Definition at line 9852 of file z3py.py.
9852 def FPVal(sig, exp=None, fps=None, ctx=None):
9853 """Return a floating-point value of value `val` and sort `fps`.
9854 If `ctx=None`, then the global context is used.
9856 >>> v = FPVal(20.0, FPSort(8, 24))
9859 >>> print("0x%.8x" % v.exponent_as_long(False))
9861 >>> v = FPVal(2.25, FPSort(8, 24))
9864 >>> v = FPVal(-2.25, FPSort(8, 24))
9867 >>> FPVal(-0.0, FPSort(8, 24))
9869 >>> FPVal(0.0, FPSort(8, 24))
9871 >>> FPVal(+0.0, FPSort(8, 24))
9879 fps = _dflt_fps(ctx)
9883 val = _to_float_str(sig)
9884 if val ==
"NaN" or val ==
"nan":
9888 elif val ==
"0.0" or val ==
"+0.0":
9890 elif val ==
"+oo" or val ==
"+inf" or val ==
"+Inf":
9892 elif val ==
"-oo" or val ==
"-inf" or val ==
"-Inf":
9895 return FPNumRef(
Z3_mk_numeral(ctx.ref(), val, fps.ast), ctx)
Referenced by set_default_fp_sort().
◆ fpZero()
| def z3py.fpZero |
( |
|
s, |
|
|
|
negative |
|
) |
| |
Create a Z3 floating-point +0.0 or -0.0 term.
Definition at line 9845 of file z3py.py.
9846 """Create a Z3 floating-point +0.0 or -0.0 term."""
9847 _z3_assert(isinstance(s, FPSortRef),
"sort mismatch")
9848 _z3_assert(isinstance(negative, bool),
"expected Boolean flag")
9849 return FPNumRef(
Z3_mk_fpa_zero(s.ctx_ref(), s.ast, negative), s.ctx)
◆ FreshBool()
| def z3py.FreshBool |
( |
|
prefix = "b", |
|
|
|
ctx = None |
|
) |
| |
Return a fresh Boolean constant in the given context using the given prefix.
If `ctx=None`, then the global context is used.
>>> b1 = FreshBool()
>>> b2 = FreshBool()
>>> eq(b1, b2)
False
Definition at line 1735 of file z3py.py.
1736 """Return a fresh Boolean constant in the given context using the given prefix.
1738 If `ctx=None`, then the global context is used.
1740 >>> b1 = FreshBool()
1741 >>> b2 = FreshBool()
◆ FreshConst()
| def z3py.FreshConst |
( |
|
sort, |
|
|
|
prefix = "c" |
|
) |
| |
Create a fresh constant of a specified sort
Definition at line 1432 of file z3py.py.
1433 """Create a fresh constant of a specified sort"""
1434 ctx = _get_ctx(sort.ctx)
◆ FreshFunction()
| def z3py.FreshFunction |
( |
* |
sig | ) |
|
Create a new fresh Z3 uninterpreted function with the given sorts.
Definition at line 883 of file z3py.py.
884 """Create a new fresh Z3 uninterpreted function with the given sorts.
888 _z3_assert(len(sig) > 0,
"At least two arguments expected")
892 _z3_assert(
is_sort(rng),
"Z3 sort expected")
893 dom = (z3.Sort * arity)()
894 for i
in range(arity):
896 _z3_assert(
is_sort(sig[i]),
"Z3 sort expected")
◆ FreshInt()
| def z3py.FreshInt |
( |
|
prefix = "x", |
|
|
|
ctx = None |
|
) |
| |
Return a fresh integer constant in the given context using the given prefix.
>>> x = FreshInt()
>>> y = FreshInt()
>>> eq(x, y)
False
>>> x.sort()
Int
Definition at line 3249 of file z3py.py.
3249 def FreshInt(prefix="x", ctx=None):
3250 """Return a fresh integer constant in the given context using the given prefix.
◆ FreshReal()
| def z3py.FreshReal |
( |
|
prefix = "b", |
|
|
|
ctx = None |
|
) |
| |
Return a fresh real constant in the given context using the given prefix.
>>> x = FreshReal()
>>> y = FreshReal()
>>> eq(x, y)
False
>>> x.sort()
Real
Definition at line 3306 of file z3py.py.
3307 """Return a fresh real constant in the given context using the given prefix.
◆ Full()
Create the regular expression that accepts the universal language
>>> e = Full(ReSort(SeqSort(IntSort())))
>>> print(e)
Full(ReSort(Seq(Int)))
>>> e1 = Full(ReSort(StringSort()))
>>> print(e1)
Full(ReSort(String))
Definition at line 10740 of file z3py.py.
10741 """Create the regular expression that accepts the universal language
10742 >>> e = Full(ReSort(SeqSort(IntSort())))
10744 Full(ReSort(Seq(Int)))
10745 >>> e1 = Full(ReSort(StringSort()))
10747 Full(ReSort(String))
10749 if isinstance(s, ReSortRef):
10751 raise Z3Exception(
"Non-sequence, non-regular expression sort passed to Full")
◆ FullSet()
Create the full set
>>> FullSet(IntSort())
K(Int, True)
Definition at line 4865 of file z3py.py.
4866 """Create the full set
4867 >>> FullSet(IntSort())
◆ Function()
| def z3py.Function |
( |
|
name, |
|
|
* |
sig |
|
) |
| |
Create a new Z3 uninterpreted function with the given sorts.
>>> f = Function('f', IntSort(), IntSort())
>>> f(f(0))
f(f(0))
Definition at line 860 of file z3py.py.
861 """Create a new Z3 uninterpreted function with the given sorts.
863 >>> f = Function('f', IntSort(), IntSort())
869 _z3_assert(len(sig) > 0,
"At least two arguments expected")
873 _z3_assert(
is_sort(rng),
"Z3 sort expected")
874 dom = (Sort * arity)()
875 for i
in range(arity):
877 _z3_assert(
is_sort(sig[i]),
"Z3 sort expected")
◆ get_as_array_func()
| def z3py.get_as_array_func |
( |
|
n | ) |
|
Return the function declaration f associated with a Z3 expression of the form (_ as-array f).
Definition at line 6589 of file z3py.py.
6590 """Return the function declaration f associated with a Z3 expression of the form (_ as-array f)."""
6592 _z3_assert(
is_as_array(n),
"as-array Z3 expression expected.")
Referenced by ModelRef.get_interp().
◆ get_ctx()
◆ get_default_fp_sort()
| def z3py.get_default_fp_sort |
( |
|
ctx = None | ) |
|
◆ get_default_rounding_mode()
| def z3py.get_default_rounding_mode |
( |
|
ctx = None | ) |
|
Retrieves the global default rounding mode.
Definition at line 9116 of file z3py.py.
9117 """Retrieves the global default rounding mode."""
9118 global _dflt_rounding_mode
9119 if _dflt_rounding_mode == Z3_OP_FPA_RM_TOWARD_ZERO:
9121 elif _dflt_rounding_mode == Z3_OP_FPA_RM_TOWARD_NEGATIVE:
9123 elif _dflt_rounding_mode == Z3_OP_FPA_RM_TOWARD_POSITIVE:
9125 elif _dflt_rounding_mode == Z3_OP_FPA_RM_NEAREST_TIES_TO_EVEN:
9127 elif _dflt_rounding_mode == Z3_OP_FPA_RM_NEAREST_TIES_TO_AWAY:
Referenced by set_default_fp_sort().
◆ get_full_version()
| def z3py.get_full_version |
( |
| ) |
|
◆ get_map_func()
| def z3py.get_map_func |
( |
|
a | ) |
|
Return the function declaration associated with a Z3 map array expression.
>>> f = Function('f', IntSort(), IntSort())
>>> b = Array('b', IntSort(), IntSort())
>>> a = Map(f, b)
>>> eq(f, get_map_func(a))
True
>>> get_map_func(a)
f
>>> get_map_func(a)(0)
f(0)
Definition at line 4621 of file z3py.py.
4622 """Return the function declaration associated with a Z3 map array expression.
4624 >>> f = Function('f', IntSort(), IntSort())
4625 >>> b = Array('b', IntSort(), IntSort())
4627 >>> eq(f, get_map_func(a))
4631 >>> get_map_func(a)(0)
4635 _z3_assert(
is_map(a),
"Z3 array map expression expected.")
◆ get_param()
| def z3py.get_param |
( |
|
name | ) |
|
Return the value of a Z3 global (or module) parameter
>>> get_param('nlsat.reorder')
'true'
Definition at line 306 of file z3py.py.
307 """Return the value of a Z3 global (or module) parameter
309 >>> get_param('nlsat.reorder')
312 ptr = (ctypes.c_char_p * 1)()
314 r = z3core._to_pystr(ptr[0])
316 raise Z3Exception(
"failed to retrieve value for '%s'" % name)
◆ get_var_index()
| def z3py.get_var_index |
( |
|
a | ) |
|
Return the de-Bruijn index of the Z3 bounded variable `a`.
>>> x = Int('x')
>>> y = Int('y')
>>> is_var(x)
False
>>> is_const(x)
True
>>> f = Function('f', IntSort(), IntSort(), IntSort())
>>> # Z3 replaces x and y with bound variables when ForAll is executed.
>>> q = ForAll([x, y], f(x, y) == x + y)
>>> q.body()
f(Var(1), Var(0)) == Var(1) + Var(0)
>>> b = q.body()
>>> b.arg(0)
f(Var(1), Var(0))
>>> v1 = b.arg(0).arg(0)
>>> v2 = b.arg(0).arg(1)
>>> v1
Var(1)
>>> v2
Var(0)
>>> get_var_index(v1)
1
>>> get_var_index(v2)
0
Definition at line 1303 of file z3py.py.
1304 """Return the de-Bruijn index of the Z3 bounded variable `a`.
1312 >>> f = Function('f', IntSort(), IntSort(), IntSort())
1313 >>> # Z3 replaces x and y with bound variables when ForAll is executed.
1314 >>> q = ForAll([x, y], f(x, y) == x + y)
1316 f(Var(1), Var(0)) == Var(1) + Var(0)
1320 >>> v1 = b.arg(0).arg(0)
1321 >>> v2 = b.arg(0).arg(1)
1326 >>> get_var_index(v1)
1328 >>> get_var_index(v2)
1332 _z3_assert(
is_var(a),
"Z3 bound variable expected")
◆ get_version()
Definition at line 94 of file z3py.py.
95 major = ctypes.c_uint(0)
96 minor = ctypes.c_uint(0)
97 build = ctypes.c_uint(0)
98 rev = ctypes.c_uint(0)
100 return (major.value, minor.value, build.value, rev.value)
◆ get_version_string()
| def z3py.get_version_string |
( |
| ) |
|
Definition at line 85 of file z3py.py.
86 major = ctypes.c_uint(0)
87 minor = ctypes.c_uint(0)
88 build = ctypes.c_uint(0)
89 rev = ctypes.c_uint(0)
91 return "%s.%s.%s" % (major.value, minor.value, build.value)
◆ help_simplify()
| def z3py.help_simplify |
( |
| ) |
|
Return a string describing all options available for Z3 `simplify` procedure.
Definition at line 8670 of file z3py.py.
8671 """Return a string describing all options available for Z3 `simplify` procedure."""
◆ If()
| def z3py.If |
( |
|
a, |
|
|
|
b, |
|
|
|
c, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 if-then-else expression.
>>> x = Int('x')
>>> y = Int('y')
>>> max = If(x > y, x, y)
>>> max
If(x > y, x, y)
>>> simplify(max)
If(x <= y, y, x)
Definition at line 1349 of file z3py.py.
1349 def If(a, b, c, ctx=None):
1350 """Create a Z3 if-then-else expression.
1354 >>> max = If(x > y, x, y)
1360 if isinstance(a, Probe)
or isinstance(b, Tactic)
or isinstance(c, Tactic):
1361 return Cond(a, b, c, ctx)
1363 ctx = _get_ctx(_ctx_from_ast_arg_list([a, b, c], ctx))
1366 b, c = _coerce_exprs(b, c, ctx)
1368 _z3_assert(a.ctx == b.ctx,
"Context mismatch")
1369 return _to_expr_ref(
Z3_mk_ite(ctx.ref(), a.as_ast(), b.as_ast(), c.as_ast()), ctx)
Referenced by BoolRef.__mul__(), and ArithRef.__mul__().
◆ Implies()
| def z3py.Implies |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 implies expression.
>>> p, q = Bools('p q')
>>> Implies(p, q)
Implies(p, q)
Definition at line 1749 of file z3py.py.
1750 """Create a Z3 implies expression.
1752 >>> p, q = Bools('p q')
1756 ctx = _get_ctx(_ctx_from_ast_arg_list([a, b], ctx))
1760 return BoolRef(
Z3_mk_implies(ctx.ref(), a.as_ast(), b.as_ast()), ctx)
Referenced by Fixedpoint.add_rule(), and Fixedpoint.update_rule().
◆ IndexOf()
| def z3py.IndexOf |
( |
|
s, |
|
|
|
substr, |
|
|
|
offset = None |
|
) |
| |
Retrieve the index of substring within a string starting at a specified offset.
>>> simplify(IndexOf("abcabc", "bc", 0))
1
>>> simplify(IndexOf("abcabc", "bc", 2))
4
Definition at line 10823 of file z3py.py.
10823 def IndexOf(s, substr, offset=None):
10824 """Retrieve the index of substring within a string starting at a specified offset.
10825 >>> simplify(IndexOf("abcabc", "bc", 0))
10827 >>> simplify(IndexOf("abcabc", "bc", 2))
10835 ctx = _get_ctx2(s, substr, ctx)
10836 s = _coerce_seq(s, ctx)
10837 substr = _coerce_seq(substr, ctx)
10838 if _is_int(offset):
10839 offset =
IntVal(offset, ctx)
10840 return ArithRef(
Z3_mk_seq_index(s.ctx_ref(), s.as_ast(), substr.as_ast(), offset.as_ast()), s.ctx)
◆ InRe()
Create regular expression membership test
>>> re = Union(Re("a"),Re("b"))
>>> print (simplify(InRe("a", re)))
True
>>> print (simplify(InRe("b", re)))
True
>>> print (simplify(InRe("c", re)))
False
Definition at line 10924 of file z3py.py.
10925 """Create regular expression membership test
10926 >>> re = Union(Re("a"),Re("b"))
10927 >>> print (simplify(InRe("a", re)))
10929 >>> print (simplify(InRe("b", re)))
10931 >>> print (simplify(InRe("c", re)))
10934 s = _coerce_seq(s, re.ctx)
10935 return BoolRef(
Z3_mk_seq_in_re(s.ctx_ref(), s.as_ast(), re.as_ast()), s.ctx)
◆ Int()
| def z3py.Int |
( |
|
name, |
|
|
|
ctx = None |
|
) |
| |
Return an integer constant named `name`. If `ctx=None`, then the global context is used.
>>> x = Int('x')
>>> is_int(x)
True
>>> is_int(x + 1)
True
Definition at line 3210 of file z3py.py.
3210 def Int(name, ctx=None):
3211 """Return an integer constant named `name`. If `ctx=None`, then the global context is used.
Referenced by Ints(), and IntVector().
◆ Int2BV()
| def z3py.Int2BV |
( |
|
a, |
|
|
|
num_bits |
|
) |
| |
Return the z3 expression Int2BV(a, num_bits).
It is a bit-vector of width num_bits and represents the
modulo of a by 2^num_bits
Definition at line 3958 of file z3py.py.
3959 """Return the z3 expression Int2BV(a, num_bits).
3960 It is a bit-vector of width num_bits and represents the
3961 modulo of a by 2^num_bits
3964 return BitVecRef(
Z3_mk_int2bv(ctx.ref(), num_bits, a.as_ast()), ctx)
◆ Intersect()
| def z3py.Intersect |
( |
* |
args | ) |
|
Create intersection of regular expressions.
>>> re = Intersect(Re("a"), Re("b"), Re("c"))
Definition at line 10958 of file z3py.py.
10959 """Create intersection of regular expressions.
10960 >>> re = Intersect(Re("a"), Re("b"), Re("c"))
10962 args = _get_args(args)
10965 _z3_assert(sz > 0,
"At least one argument expected.")
10966 _z3_assert(all([
is_re(a)
for a
in args]),
"All arguments must be regular expressions.")
10971 for i
in range(sz):
10972 v[i] = args[i].as_ast()
◆ Ints()
| def z3py.Ints |
( |
|
names, |
|
|
|
ctx = None |
|
) |
| |
Return a tuple of Integer constants.
>>> x, y, z = Ints('x y z')
>>> Sum(x, y, z)
x + y + z
Definition at line 3223 of file z3py.py.
3223 def Ints(names, ctx=None):
3224 """Return a tuple of Integer constants.
3226 >>> x, y, z = Ints('x y z')
3231 if isinstance(names, str):
3232 names = names.split(
" ")
3233 return [
Int(name, ctx)
for name
in names]
◆ IntSort()
| def z3py.IntSort |
( |
|
ctx = None | ) |
|
Return the integer sort in the given context. If `ctx=None`, then the global context is used.
>>> IntSort()
Int
>>> x = Const('x', IntSort())
>>> is_int(x)
True
>>> x.sort() == IntSort()
True
>>> x.sort() == BoolSort()
False
Definition at line 3100 of file z3py.py.
3101 """Return the integer sort in the given context. If `ctx=None`, then the global context is used.
3105 >>> x = Const('x', IntSort())
3108 >>> x.sort() == IntSort()
3110 >>> x.sort() == BoolSort()
Referenced by FreshInt(), Int(), and IntVal().
◆ IntToStr()
Convert integer expression to string
Definition at line 10878 of file z3py.py.
10879 """Convert integer expression to string"""
◆ IntVal()
| def z3py.IntVal |
( |
|
val, |
|
|
|
ctx = None |
|
) |
| |
◆ IntVector()
| def z3py.IntVector |
( |
|
prefix, |
|
|
|
sz, |
|
|
|
ctx = None |
|
) |
| |
Return a list of integer constants of size `sz`.
>>> X = IntVector('x', 3)
>>> X
[x__0, x__1, x__2]
>>> Sum(X)
x__0 + x__1 + x__2
Definition at line 3236 of file z3py.py.
3237 """Return a list of integer constants of size `sz`.
3239 >>> X = IntVector('x', 3)
3246 return [
Int(
"%s__%s" % (prefix, i), ctx)
for i
in range(sz)]
◆ is_add()
Return `True` if `a` is an expression of the form b + c.
>>> x, y = Ints('x y')
>>> is_add(x + y)
True
>>> is_add(x - y)
False
Definition at line 2754 of file z3py.py.
2755 """Return `True` if `a` is an expression of the form b + c.
2757 >>> x, y = Ints('x y')
◆ is_algebraic_value()
| def z3py.is_algebraic_value |
( |
|
a | ) |
|
Return `True` if `a` is an algebraic value of sort Real.
>>> is_algebraic_value(RealVal("3/5"))
False
>>> n = simplify(Sqrt(2))
>>> n
1.4142135623?
>>> is_algebraic_value(n)
True
Definition at line 2740 of file z3py.py.
2741 """Return `True` if `a` is an algebraic value of sort Real.
2743 >>> is_algebraic_value(RealVal("3/5"))
2745 >>> n = simplify(Sqrt(2))
2748 >>> is_algebraic_value(n)
2751 return is_arith(a)
and a.is_real()
and _is_algebraic(a.ctx, a.as_ast())
◆ is_and()
Return `True` if `a` is a Z3 and expression.
>>> p, q = Bools('p q')
>>> is_and(And(p, q))
True
>>> is_and(Or(p, q))
False
Definition at line 1585 of file z3py.py.
1586 """Return `True` if `a` is a Z3 and expression.
1588 >>> p, q = Bools('p q')
1589 >>> is_and(And(p, q))
1591 >>> is_and(Or(p, q))
◆ is_app()
Return `True` if `a` is a Z3 function application.
Note that, constants are function applications with 0 arguments.
>>> a = Int('a')
>>> is_app(a)
True
>>> is_app(a + 1)
True
>>> is_app(IntSort())
False
>>> is_app(1)
False
>>> is_app(IntVal(1))
True
>>> x = Int('x')
>>> is_app(ForAll(x, x >= 0))
False
Definition at line 1233 of file z3py.py.
1234 """Return `True` if `a` is a Z3 function application.
1236 Note that, constants are function applications with 0 arguments.
1243 >>> is_app(IntSort())
1247 >>> is_app(IntVal(1))
1250 >>> is_app(ForAll(x, x >= 0))
1253 if not isinstance(a, ExprRef):
1255 k = _ast_kind(a.ctx, a)
1256 return k == Z3_NUMERAL_AST
or k == Z3_APP_AST
Referenced by ExprRef.arg(), ExprRef.children(), ExprRef.decl(), is_app_of(), is_const(), is_quantifier(), Lambda(), ExprRef.num_args(), and RecAddDefinition().
◆ is_app_of()
| def z3py.is_app_of |
( |
|
a, |
|
|
|
k |
|
) |
| |
Return `True` if `a` is an application of the given kind `k`.
>>> x = Int('x')
>>> n = x + 1
>>> is_app_of(n, Z3_OP_ADD)
True
>>> is_app_of(n, Z3_OP_MUL)
False
Definition at line 1336 of file z3py.py.
1337 """Return `True` if `a` is an application of the given kind `k`.
1341 >>> is_app_of(n, Z3_OP_ADD)
1343 >>> is_app_of(n, Z3_OP_MUL)
1346 return is_app(a)
and a.decl().kind() == k
Referenced by is_add(), is_and(), is_const_array(), is_default(), is_distinct(), is_div(), is_eq(), is_false(), is_ge(), is_gt(), is_idiv(), is_implies(), is_is_int(), is_K(), is_le(), is_lt(), is_map(), is_mod(), is_mul(), is_not(), is_or(), is_select(), is_store(), is_sub(), is_to_int(), is_to_real(), and is_true().
◆ is_arith()
Return `True` if `a` is an arithmetical expression.
>>> x = Int('x')
>>> is_arith(x)
True
>>> is_arith(x + 1)
True
>>> is_arith(1)
False
>>> is_arith(IntVal(1))
True
>>> y = Real('y')
>>> is_arith(y)
True
>>> is_arith(y + 1)
True
Definition at line 2627 of file z3py.py.
2628 """Return `True` if `a` is an arithmetical expression.
2637 >>> is_arith(IntVal(1))
2645 return isinstance(a, ArithRef)
Referenced by is_algebraic_value(), is_int(), is_int_value(), is_rational_value(), and is_real().
◆ is_arith_sort()
| def z3py.is_arith_sort |
( |
|
s | ) |
|
Return `True` if s is an arithmetical sort (type).
>>> is_arith_sort(IntSort())
True
>>> is_arith_sort(RealSort())
True
>>> is_arith_sort(BoolSort())
False
>>> n = Int('x') + 1
>>> is_arith_sort(n.sort())
True
Definition at line 2326 of file z3py.py.
2327 """Return `True` if s is an arithmetical sort (type).
2329 >>> is_arith_sort(IntSort())
2331 >>> is_arith_sort(RealSort())
2333 >>> is_arith_sort(BoolSort())
2335 >>> n = Int('x') + 1
2336 >>> is_arith_sort(n.sort())
2339 return isinstance(s, ArithSortRef)
Referenced by ArithSortRef.subsort().
◆ is_array()
Return `True` if `a` is a Z3 array expression.
>>> a = Array('a', IntSort(), IntSort())
>>> is_array(a)
True
>>> is_array(Store(a, 0, 1))
True
>>> is_array(a[0])
False
Definition at line 4556 of file z3py.py.
4557 """Return `True` if `a` is a Z3 array expression.
4559 >>> a = Array('a', IntSort(), IntSort())
4562 >>> is_array(Store(a, 0, 1))
4567 return isinstance(a, ArrayRef)
Referenced by Ext(), and Map().
◆ is_array_sort()
| def z3py.is_array_sort |
( |
|
a | ) |
|
◆ is_as_array()
| def z3py.is_as_array |
( |
|
n | ) |
|
◆ is_ast()
Return `True` if `a` is an AST node.
>>> is_ast(10)
False
>>> is_ast(IntVal(10))
True
>>> is_ast(Int('x'))
True
>>> is_ast(BoolSort())
True
>>> is_ast(Function('f', IntSort(), IntSort()))
True
>>> is_ast("x")
False
>>> is_ast(Solver())
False
Definition at line 450 of file z3py.py.
451 """Return `True` if `a` is an AST node.
455 >>> is_ast(IntVal(10))
459 >>> is_ast(BoolSort())
461 >>> is_ast(Function('f', IntSort(), IntSort()))
468 return isinstance(a, AstRef)
Referenced by eq(), AstRef.eq(), and ReSort().
◆ is_bool()
Return `True` if `a` is a Z3 Boolean expression.
>>> p = Bool('p')
>>> is_bool(p)
True
>>> q = Bool('q')
>>> is_bool(And(p, q))
True
>>> x = Real('x')
>>> is_bool(x)
False
>>> is_bool(x == 0)
True
Definition at line 1535 of file z3py.py.
1536 """Return `True` if `a` is a Z3 Boolean expression.
1542 >>> is_bool(And(p, q))
1550 return isinstance(a, BoolRef)
Referenced by is_quantifier(), and prove().
◆ is_bv()
Return `True` if `a` is a Z3 bit-vector expression.
>>> b = BitVec('b', 32)
>>> is_bv(b)
True
>>> is_bv(b + 10)
True
>>> is_bv(Int('x'))
False
Definition at line 3906 of file z3py.py.
3907 """Return `True` if `a` is a Z3 bit-vector expression.
3909 >>> b = BitVec('b', 32)
3917 return isinstance(a, BitVecRef)
Referenced by BV2Int(), BVRedAnd(), BVRedOr(), BVSNegNoOverflow(), Concat(), Extract(), fpBVToFP(), fpFP(), fpSignedToFP(), fpToFP(), fpToFPUnsigned(), fpUnsignedToFP(), is_bv_value(), Product(), RepeatBitVec(), SignExt(), Sum(), and ZeroExt().
◆ is_bv_sort()
Return True if `s` is a Z3 bit-vector sort.
>>> is_bv_sort(BitVecSort(32))
True
>>> is_bv_sort(IntSort())
False
Definition at line 3438 of file z3py.py.
3439 """Return True if `s` is a Z3 bit-vector sort.
3441 >>> is_bv_sort(BitVecSort(32))
3443 >>> is_bv_sort(IntSort())
3446 return isinstance(s, BitVecSortRef)
Referenced by BitVecVal(), fpToSBV(), fpToUBV(), and BitVecSortRef.subsort().
◆ is_bv_value()
| def z3py.is_bv_value |
( |
|
a | ) |
|
Return `True` if `a` is a Z3 bit-vector numeral value.
>>> b = BitVec('b', 32)
>>> is_bv_value(b)
False
>>> b = BitVecVal(10, 32)
>>> b
10
>>> is_bv_value(b)
True
Definition at line 3920 of file z3py.py.
3921 """Return `True` if `a` is a Z3 bit-vector numeral value.
3923 >>> b = BitVec('b', 32)
3926 >>> b = BitVecVal(10, 32)
3932 return is_bv(a)
and _is_numeral(a.ctx, a.as_ast())
◆ is_const()
◆ is_const_array()
| def z3py.is_const_array |
( |
|
a | ) |
|
Return `True` if `a` is a Z3 constant array.
>>> a = K(IntSort(), 10)
>>> is_const_array(a)
True
>>> a = Array('a', IntSort(), IntSort())
>>> is_const_array(a)
False
Definition at line 4570 of file z3py.py.
4571 """Return `True` if `a` is a Z3 constant array.
4573 >>> a = K(IntSort(), 10)
4574 >>> is_const_array(a)
4576 >>> a = Array('a', IntSort(), IntSort())
4577 >>> is_const_array(a)
◆ is_default()
Return `True` if `a` is a Z3 default array expression.
>>> d = Default(K(IntSort(), 10))
>>> is_default(d)
True
Definition at line 4612 of file z3py.py.
4613 """Return `True` if `a` is a Z3 default array expression.
4614 >>> d = Default(K(IntSort(), 10))
4618 return is_app_of(a, Z3_OP_ARRAY_DEFAULT)
◆ is_distinct()
| def z3py.is_distinct |
( |
|
a | ) |
|
Return `True` if `a` is a Z3 distinct expression.
>>> x, y, z = Ints('x y z')
>>> is_distinct(x == y)
False
>>> is_distinct(Distinct(x, y, z))
True
Definition at line 1643 of file z3py.py.
1644 """Return `True` if `a` is a Z3 distinct expression.
1646 >>> x, y, z = Ints('x y z')
1647 >>> is_distinct(x == y)
1649 >>> is_distinct(Distinct(x, y, z))
◆ is_div()
Return `True` if `a` is an expression of the form b / c.
>>> x, y = Reals('x y')
>>> is_div(x / y)
True
>>> is_div(x + y)
False
>>> x, y = Ints('x y')
>>> is_div(x / y)
False
>>> is_idiv(x / y)
True
Definition at line 2790 of file z3py.py.
2791 """Return `True` if `a` is an expression of the form b / c.
2793 >>> x, y = Reals('x y')
2798 >>> x, y = Ints('x y')
◆ is_eq()
Return `True` if `a` is a Z3 equality expression.
>>> x, y = Ints('x y')
>>> is_eq(x == y)
True
Definition at line 1633 of file z3py.py.
1634 """Return `True` if `a` is a Z3 equality expression.
1636 >>> x, y = Ints('x y')
Referenced by AstRef.__bool__().
◆ is_expr()
Return `True` if `a` is a Z3 expression.
>>> a = Int('a')
>>> is_expr(a)
True
>>> is_expr(a + 1)
True
>>> is_expr(IntSort())
False
>>> is_expr(1)
False
>>> is_expr(IntVal(1))
True
>>> x = Int('x')
>>> is_expr(ForAll(x, x >= 0))
True
>>> is_expr(FPVal(1.0))
True
Definition at line 1210 of file z3py.py.
1211 """Return `True` if `a` is a Z3 expression.
1218 >>> is_expr(IntSort())
1222 >>> is_expr(IntVal(1))
1225 >>> is_expr(ForAll(x, x >= 0))
1227 >>> is_expr(FPVal(1.0))
1230 return isinstance(a, ExprRef)
Referenced by SeqRef.__gt__(), SortRef.cast(), BoolSortRef.cast(), ArithSortRef.cast(), BitVecSortRef.cast(), FPSortRef.cast(), Cbrt(), ExprRef.children(), Concat(), AlgebraicNumRef.index(), IndexOf(), IntToStr(), is_quantifier(), is_var(), K(), MultiPattern(), Replace(), simplify(), Sqrt(), substitute(), and substitute_vars().
◆ is_false()
Return `True` if `a` is the Z3 false expression.
>>> p = Bool('p')
>>> is_false(p)
False
>>> is_false(False)
False
>>> is_false(BoolVal(False))
True
Definition at line 1571 of file z3py.py.
1572 """Return `True` if `a` is the Z3 false expression.
1579 >>> is_false(BoolVal(False))
Referenced by AstRef.__bool__().
◆ is_finite_domain()
| def z3py.is_finite_domain |
( |
|
a | ) |
|
Return `True` if `a` is a Z3 finite-domain expression.
>>> s = FiniteDomainSort('S', 100)
>>> b = Const('b', s)
>>> is_finite_domain(b)
True
>>> is_finite_domain(Int('x'))
False
Definition at line 7621 of file z3py.py.
7622 """Return `True` if `a` is a Z3 finite-domain expression.
7624 >>> s = FiniteDomainSort('S', 100)
7625 >>> b = Const('b', s)
7626 >>> is_finite_domain(b)
7628 >>> is_finite_domain(Int('x'))
7631 return isinstance(a, FiniteDomainRef)
Referenced by is_finite_domain_value().
◆ is_finite_domain_sort()
| def z3py.is_finite_domain_sort |
( |
|
s | ) |
|
Return True if `s` is a Z3 finite-domain sort.
>>> is_finite_domain_sort(FiniteDomainSort('S', 100))
True
>>> is_finite_domain_sort(IntSort())
False
Definition at line 7598 of file z3py.py.
7599 """Return True if `s` is a Z3 finite-domain sort.
7601 >>> is_finite_domain_sort(FiniteDomainSort('S', 100))
7603 >>> is_finite_domain_sort(IntSort())
7606 return isinstance(s, FiniteDomainSortRef)
Referenced by FiniteDomainVal().
◆ is_finite_domain_value()
| def z3py.is_finite_domain_value |
( |
|
a | ) |
|
Return `True` if `a` is a Z3 finite-domain value.
>>> s = FiniteDomainSort('S', 100)
>>> b = Const('b', s)
>>> is_finite_domain_value(b)
False
>>> b = FiniteDomainVal(10, s)
>>> b
10
>>> is_finite_domain_value(b)
True
Definition at line 7675 of file z3py.py.
7676 """Return `True` if `a` is a Z3 finite-domain value.
7678 >>> s = FiniteDomainSort('S', 100)
7679 >>> b = Const('b', s)
7680 >>> is_finite_domain_value(b)
7682 >>> b = FiniteDomainVal(10, s)
7685 >>> is_finite_domain_value(b)
◆ is_fp()
Return `True` if `a` is a Z3 floating-point expression.
>>> b = FP('b', FPSort(8, 24))
>>> is_fp(b)
True
>>> is_fp(b + 1.0)
True
>>> is_fp(Int('x'))
False
Definition at line 9698 of file z3py.py.
9699 """Return `True` if `a` is a Z3 floating-point expression.
9701 >>> b = FP('b', FPSort(8, 24))
9709 return isinstance(a, FPRef)
Referenced by fpFPToFP(), fpIsPositive(), fpNeg(), fpToFP(), fpToIEEEBV(), fpToReal(), fpToSBV(), fpToUBV(), is_fp_value(), and set_default_fp_sort().
◆ is_fp_sort()
Return True if `s` is a Z3 floating-point sort.
>>> is_fp_sort(FPSort(8, 24))
True
>>> is_fp_sort(IntSort())
False
Definition at line 9282 of file z3py.py.
9283 """Return True if `s` is a Z3 floating-point sort.
9285 >>> is_fp_sort(FPSort(8, 24))
9287 >>> is_fp_sort(IntSort())
9290 return isinstance(s, FPSortRef)
Referenced by fpBVToFP(), fpFPToFP(), fpRealToFP(), fpSignedToFP(), fpToFP(), fpToFPUnsigned(), fpUnsignedToFP(), and FPVal().
◆ is_fp_value()
| def z3py.is_fp_value |
( |
|
a | ) |
|
Return `True` if `a` is a Z3 floating-point numeral value.
>>> b = FP('b', FPSort(8, 24))
>>> is_fp_value(b)
False
>>> b = FPVal(1.0, FPSort(8, 24))
>>> b
1
>>> is_fp_value(b)
True
Definition at line 9712 of file z3py.py.
9713 """Return `True` if `a` is a Z3 floating-point numeral value.
9715 >>> b = FP('b', FPSort(8, 24))
9718 >>> b = FPVal(1.0, FPSort(8, 24))
9724 return is_fp(a)
and _is_numeral(a.ctx, a.ast)
◆ is_fprm()
Return `True` if `a` is a Z3 floating-point rounding mode expression.
>>> rm = RNE()
>>> is_fprm(rm)
True
>>> rm = 1.0
>>> is_fprm(rm)
False
Definition at line 9542 of file z3py.py.
9543 """Return `True` if `a` is a Z3 floating-point rounding mode expression.
9552 return isinstance(a, FPRMRef)
Referenced by fpFPToFP(), fpNeg(), fpRealToFP(), fpSignedToFP(), fpToFP(), fpToFPUnsigned(), fpToSBV(), fpToUBV(), fpUnsignedToFP(), and is_fprm_value().
◆ is_fprm_sort()
| def z3py.is_fprm_sort |
( |
|
s | ) |
|
Return True if `s` is a Z3 floating-point rounding mode sort.
>>> is_fprm_sort(FPSort(8, 24))
False
>>> is_fprm_sort(RNE().sort())
True
Definition at line 9293 of file z3py.py.
9294 """Return True if `s` is a Z3 floating-point rounding mode sort.
9296 >>> is_fprm_sort(FPSort(8, 24))
9298 >>> is_fprm_sort(RNE().sort())
9301 return isinstance(s, FPRMSortRef)
◆ is_fprm_value()
| def z3py.is_fprm_value |
( |
|
a | ) |
|
Return `True` if `a` is a Z3 floating-point rounding mode numeral value.
Definition at line 9555 of file z3py.py.
9556 """Return `True` if `a` is a Z3 floating-point rounding mode numeral value."""
9557 return is_fprm(a)
and _is_numeral(a.ctx, a.ast)
Referenced by set_default_rounding_mode().
◆ is_func_decl()
| def z3py.is_func_decl |
( |
|
a | ) |
|
Return `True` if `a` is a Z3 function declaration.
>>> f = Function('f', IntSort(), IntSort())
>>> is_func_decl(f)
True
>>> x = Real('x')
>>> is_func_decl(x)
False
Definition at line 847 of file z3py.py.
848 """Return `True` if `a` is a Z3 function declaration.
850 >>> f = Function('f', IntSort(), IntSort())
857 return isinstance(a, FuncDeclRef)
Referenced by Map(), and prove().
◆ is_ge()
Return `True` if `a` is an expression of the form b >= c.
>>> x, y = Ints('x y')
>>> is_ge(x >= y)
True
>>> is_ge(x == y)
False
Definition at line 2855 of file z3py.py.
2856 """Return `True` if `a` is an expression of the form b >= c.
2858 >>> x, y = Ints('x y')
◆ is_gt()
Return `True` if `a` is an expression of the form b > c.
>>> x, y = Ints('x y')
>>> is_gt(x > y)
True
>>> is_gt(x == y)
False
Definition at line 2867 of file z3py.py.
2868 """Return `True` if `a` is an expression of the form b > c.
2870 >>> x, y = Ints('x y')
◆ is_idiv()
Return `True` if `a` is an expression of the form b div c.
>>> x, y = Ints('x y')
>>> is_idiv(x / y)
True
>>> is_idiv(x + y)
False
Definition at line 2807 of file z3py.py.
2808 """Return `True` if `a` is an expression of the form b div c.
2810 >>> x, y = Ints('x y')
◆ is_implies()
Return `True` if `a` is a Z3 implication expression.
>>> p, q = Bools('p q')
>>> is_implies(Implies(p, q))
True
>>> is_implies(And(p, q))
False
Definition at line 1609 of file z3py.py.
1610 """Return `True` if `a` is a Z3 implication expression.
1612 >>> p, q = Bools('p q')
1613 >>> is_implies(Implies(p, q))
1615 >>> is_implies(And(p, q))
◆ is_int()
Return `True` if `a` is an integer expression.
>>> x = Int('x')
>>> is_int(x + 1)
True
>>> is_int(1)
False
>>> is_int(IntVal(1))
True
>>> y = Real('y')
>>> is_int(y)
False
>>> is_int(y + 1)
False
Definition at line 2648 of file z3py.py.
2649 """Return `True` if `a` is an integer expression.
2656 >>> is_int(IntVal(1))
◆ is_int_value()
| def z3py.is_int_value |
( |
|
a | ) |
|
Return `True` if `a` is an integer value of sort Int.
>>> is_int_value(IntVal(1))
True
>>> is_int_value(1)
False
>>> is_int_value(Int('x'))
False
>>> n = Int('x') + 1
>>> n
x + 1
>>> n.arg(1)
1
>>> is_int_value(n.arg(1))
True
>>> is_int_value(RealVal("1/3"))
False
>>> is_int_value(RealVal(1))
False
Definition at line 2694 of file z3py.py.
2695 """Return `True` if `a` is an integer value of sort Int.
2697 >>> is_int_value(IntVal(1))
2701 >>> is_int_value(Int('x'))
2703 >>> n = Int('x') + 1
2708 >>> is_int_value(n.arg(1))
2710 >>> is_int_value(RealVal("1/3"))
2712 >>> is_int_value(RealVal(1))
2715 return is_arith(a)
and a.is_int()
and _is_numeral(a.ctx, a.as_ast())
◆ is_is_int()
Return `True` if `a` is an expression of the form IsInt(b).
>>> x = Real('x')
>>> is_is_int(IsInt(x))
True
>>> is_is_int(x)
False
Definition at line 2879 of file z3py.py.
2880 """Return `True` if `a` is an expression of the form IsInt(b).
2883 >>> is_is_int(IsInt(x))
◆ is_K()
Return `True` if `a` is a Z3 constant array.
>>> a = K(IntSort(), 10)
>>> is_K(a)
True
>>> a = Array('a', IntSort(), IntSort())
>>> is_K(a)
False
Definition at line 4583 of file z3py.py.
4584 """Return `True` if `a` is a Z3 constant array.
4586 >>> a = K(IntSort(), 10)
4589 >>> a = Array('a', IntSort(), IntSort())
◆ is_le()
Return `True` if `a` is an expression of the form b <= c.
>>> x, y = Ints('x y')
>>> is_le(x <= y)
True
>>> is_le(x < y)
False
Definition at line 2831 of file z3py.py.
2832 """Return `True` if `a` is an expression of the form b <= c.
2834 >>> x, y = Ints('x y')
◆ is_lt()
Return `True` if `a` is an expression of the form b < c.
>>> x, y = Ints('x y')
>>> is_lt(x < y)
True
>>> is_lt(x == y)
False
Definition at line 2843 of file z3py.py.
2844 """Return `True` if `a` is an expression of the form b < c.
2846 >>> x, y = Ints('x y')
◆ is_map()
Return `True` if `a` is a Z3 map array expression.
>>> f = Function('f', IntSort(), IntSort())
>>> b = Array('b', IntSort(), IntSort())
>>> a = Map(f, b)
>>> a
Map(f, b)
>>> is_map(a)
True
>>> is_map(b)
False
Definition at line 4596 of file z3py.py.
4597 """Return `True` if `a` is a Z3 map array expression.
4599 >>> f = Function('f', IntSort(), IntSort())
4600 >>> b = Array('b', IntSort(), IntSort())
Referenced by get_map_func().
◆ is_mod()
Return `True` if `a` is an expression of the form b % c.
>>> x, y = Ints('x y')
>>> is_mod(x % y)
True
>>> is_mod(x + y)
False
Definition at line 2819 of file z3py.py.
2820 """Return `True` if `a` is an expression of the form b % c.
2822 >>> x, y = Ints('x y')
◆ is_mul()
Return `True` if `a` is an expression of the form b * c.
>>> x, y = Ints('x y')
>>> is_mul(x * y)
True
>>> is_mul(x - y)
False
Definition at line 2766 of file z3py.py.
2767 """Return `True` if `a` is an expression of the form b * c.
2769 >>> x, y = Ints('x y')
◆ is_not()
Return `True` if `a` is a Z3 not expression.
>>> p = Bool('p')
>>> is_not(p)
False
>>> is_not(Not(p))
True
Definition at line 1621 of file z3py.py.
1622 """Return `True` if `a` is a Z3 not expression.
Referenced by mk_not().
◆ is_or()
Return `True` if `a` is a Z3 or expression.
>>> p, q = Bools('p q')
>>> is_or(Or(p, q))
True
>>> is_or(And(p, q))
False
Definition at line 1597 of file z3py.py.
1598 """Return `True` if `a` is a Z3 or expression.
1600 >>> p, q = Bools('p q')
1603 >>> is_or(And(p, q))
◆ is_pattern()
Return `True` if `a` is a Z3 pattern (hint for quantifier instantiation.
>>> f = Function('f', IntSort(), IntSort())
>>> x = Int('x')
>>> q = ForAll(x, f(x) == 0, patterns = [ f(x) ])
>>> q
ForAll(x, f(x) == 0)
>>> q.num_patterns()
1
>>> is_pattern(q.pattern(0))
True
>>> q.pattern(0)
f(Var(0))
Definition at line 1897 of file z3py.py.
1898 """Return `True` if `a` is a Z3 pattern (hint for quantifier instantiation.
1900 >>> f = Function('f', IntSort(), IntSort())
1902 >>> q = ForAll(x, f(x) == 0, patterns = [ f(x) ])
1904 ForAll(x, f(x) == 0)
1905 >>> q.num_patterns()
1907 >>> is_pattern(q.pattern(0))
1912 return isinstance(a, PatternRef)
Referenced by is_quantifier(), and MultiPattern().
◆ is_probe()
Return `True` if `p` is a Z3 probe.
>>> is_probe(Int('x'))
False
>>> is_probe(Probe('memory'))
True
Definition at line 8511 of file z3py.py.
8512 """Return `True` if `p` is a Z3 probe.
8514 >>> is_probe(Int('x'))
8516 >>> is_probe(Probe('memory'))
8519 return isinstance(p, Probe)
Referenced by eq(), mk_not(), and Not().
◆ is_quantifier()
| def z3py.is_quantifier |
( |
|
a | ) |
|
Return `True` if `a` is a Z3 quantifier.
>>> f = Function('f', IntSort(), IntSort())
>>> x = Int('x')
>>> q = ForAll(x, f(x) == 0)
>>> is_quantifier(q)
True
>>> is_quantifier(f(x))
False
Definition at line 2138 of file z3py.py.
2139 """Return `True` if `a` is a Z3 quantifier.
2141 >>> f = Function('f', IntSort(), IntSort())
2143 >>> q = ForAll(x, f(x) == 0)
2144 >>> is_quantifier(q)
2146 >>> is_quantifier(f(x))
2149 return isinstance(a, QuantifierRef)
◆ is_rational_value()
| def z3py.is_rational_value |
( |
|
a | ) |
|
Return `True` if `a` is rational value of sort Real.
>>> is_rational_value(RealVal(1))
True
>>> is_rational_value(RealVal("3/5"))
True
>>> is_rational_value(IntVal(1))
False
>>> is_rational_value(1)
False
>>> n = Real('x') + 1
>>> n.arg(1)
1
>>> is_rational_value(n.arg(1))
True
>>> is_rational_value(Real('x'))
False
Definition at line 2718 of file z3py.py.
2719 """Return `True` if `a` is rational value of sort Real.
2721 >>> is_rational_value(RealVal(1))
2723 >>> is_rational_value(RealVal("3/5"))
2725 >>> is_rational_value(IntVal(1))
2727 >>> is_rational_value(1)
2729 >>> n = Real('x') + 1
2732 >>> is_rational_value(n.arg(1))
2734 >>> is_rational_value(Real('x'))
2737 return is_arith(a)
and a.is_real()
and _is_numeral(a.ctx, a.as_ast())
◆ is_re()
◆ is_real()
Return `True` if `a` is a real expression.
>>> x = Int('x')
>>> is_real(x + 1)
False
>>> y = Real('y')
>>> is_real(y)
True
>>> is_real(y + 1)
True
>>> is_real(1)
False
>>> is_real(RealVal(1))
True
Definition at line 2667 of file z3py.py.
2668 """Return `True` if `a` is a real expression.
2680 >>> is_real(RealVal(1))
Referenced by fpRealToFP(), and fpToFP().
◆ is_select()
Return `True` if `a` is a Z3 array select application.
>>> a = Array('a', IntSort(), IntSort())
>>> is_select(a)
False
>>> i = Int('i')
>>> is_select(a[i])
True
Definition at line 4820 of file z3py.py.
4821 """Return `True` if `a` is a Z3 array select application.
4823 >>> a = Array('a', IntSort(), IntSort())
◆ is_seq()
Return `True` if `a` is a Z3 sequence expression.
>>> print (is_seq(Unit(IntVal(0))))
True
>>> print (is_seq(StringVal("abc")))
True
Definition at line 10658 of file z3py.py.
10659 """Return `True` if `a` is a Z3 sequence expression.
10660 >>> print (is_seq(Unit(IntVal(0))))
10662 >>> print (is_seq(StringVal("abc")))
10665 return isinstance(a, SeqRef)
Referenced by SeqRef.__gt__(), Concat(), and Extract().
◆ is_sort()
◆ is_store()
Return `True` if `a` is a Z3 array store application.
>>> a = Array('a', IntSort(), IntSort())
>>> is_store(a)
False
>>> is_store(Store(a, 0, 1))
True
Definition at line 4833 of file z3py.py.
4834 """Return `True` if `a` is a Z3 array store application.
4836 >>> a = Array('a', IntSort(), IntSort())
4839 >>> is_store(Store(a, 0, 1))
◆ is_string()
Return `True` if `a` is a Z3 string expression.
>>> print (is_string(StringVal("ab")))
True
Definition at line 10668 of file z3py.py.
10669 """Return `True` if `a` is a Z3 string expression.
10670 >>> print (is_string(StringVal("ab")))
10673 return isinstance(a, SeqRef)
and a.is_string()
◆ is_string_value()
| def z3py.is_string_value |
( |
|
a | ) |
|
return 'True' if 'a' is a Z3 string constant expression.
>>> print (is_string_value(StringVal("a")))
True
>>> print (is_string_value(StringVal("a") + StringVal("b")))
False
Definition at line 10676 of file z3py.py.
10677 """return 'True' if 'a' is a Z3 string constant expression.
10678 >>> print (is_string_value(StringVal("a")))
10680 >>> print (is_string_value(StringVal("a") + StringVal("b")))
10683 return isinstance(a, SeqRef)
and a.is_string_value()
◆ is_sub()
Return `True` if `a` is an expression of the form b - c.
>>> x, y = Ints('x y')
>>> is_sub(x - y)
True
>>> is_sub(x + y)
False
Definition at line 2778 of file z3py.py.
2779 """Return `True` if `a` is an expression of the form b - c.
2781 >>> x, y = Ints('x y')
◆ is_to_int()
Return `True` if `a` is an expression of the form ToInt(b).
>>> x = Real('x')
>>> n = ToInt(x)
>>> n
ToInt(x)
>>> is_to_int(n)
True
>>> is_to_int(x)
False
Definition at line 2906 of file z3py.py.
2907 """Return `True` if `a` is an expression of the form ToInt(b).
◆ is_to_real()
Return `True` if `a` is an expression of the form ToReal(b).
>>> x = Int('x')
>>> n = ToReal(x)
>>> n
ToReal(x)
>>> is_to_real(n)
True
>>> is_to_real(x)
False
Definition at line 2891 of file z3py.py.
2892 """Return `True` if `a` is an expression of the form ToReal(b).
◆ is_true()
Return `True` if `a` is the Z3 true expression.
>>> p = Bool('p')
>>> is_true(p)
False
>>> is_true(simplify(p == p))
True
>>> x = Real('x')
>>> is_true(x == 0)
False
>>> # True is a Python Boolean expression
>>> is_true(True)
False
Definition at line 1553 of file z3py.py.
1554 """Return `True` if `a` is the Z3 true expression.
1559 >>> is_true(simplify(p == p))
1564 >>> # True is a Python Boolean expression
Referenced by AstRef.__bool__().
◆ is_var()
Return `True` if `a` is variable.
Z3 uses de-Bruijn indices for representing bound variables in
quantifiers.
>>> x = Int('x')
>>> is_var(x)
False
>>> is_const(x)
True
>>> f = Function('f', IntSort(), IntSort())
>>> # Z3 replaces x with bound variables when ForAll is executed.
>>> q = ForAll(x, f(x) == x)
>>> b = q.body()
>>> b
f(Var(0)) == Var(0)
>>> b.arg(1)
Var(0)
>>> is_var(b.arg(1))
True
Definition at line 1278 of file z3py.py.
1279 """Return `True` if `a` is variable.
1281 Z3 uses de-Bruijn indices for representing bound variables in
1289 >>> f = Function('f', IntSort(), IntSort())
1290 >>> # Z3 replaces x with bound variables when ForAll is executed.
1291 >>> q = ForAll(x, f(x) == x)
1297 >>> is_var(b.arg(1))
1300 return is_expr(a)
and _ast_kind(a.ctx, a) == Z3_VAR_AST
Referenced by get_var_index().
◆ IsInt()
Return the Z3 predicate IsInt(a).
>>> x = Real('x')
>>> IsInt(x + "1/2")
IsInt(x + 1/2)
>>> solve(IsInt(x + "1/2"), x > 0, x < 1)
[x = 1/2]
>>> solve(IsInt(x + "1/2"), x > 0, x < 1, x != "1/2")
no solution
Definition at line 3356 of file z3py.py.
3357 """ Return the Z3 predicate IsInt(a).
3360 >>> IsInt(x + "1/2")
3362 >>> solve(IsInt(x + "1/2"), x > 0, x < 1)
3364 >>> solve(IsInt(x + "1/2"), x > 0, x < 1, x != "1/2")
3368 _z3_assert(a.is_real(),
"Z3 real expression expected.")
3370 return BoolRef(
Z3_mk_is_int(ctx.ref(), a.as_ast()), ctx)
◆ IsMember()
| def z3py.IsMember |
( |
|
e, |
|
|
|
s |
|
) |
| |
Check if e is a member of set s
>>> a = Const('a', SetSort(IntSort()))
>>> IsMember(1, a)
a[1]
Definition at line 4943 of file z3py.py.
4944 """ Check if e is a member of set s
4945 >>> a = Const('a', SetSort(IntSort()))
4949 ctx = _ctx_from_ast_arg_list([s, e])
4950 e = _py2expr(e, ctx)
◆ IsSubset()
| def z3py.IsSubset |
( |
|
a, |
|
|
|
b |
|
) |
| |
Check if a is a subset of b
>>> a = Const('a', SetSort(IntSort()))
>>> b = Const('b', SetSort(IntSort()))
>>> IsSubset(a, b)
subset(a, b)
Definition at line 4954 of file z3py.py.
4955 """ Check if a is a subset of b
4956 >>> a = Const('a', SetSort(IntSort()))
4957 >>> b = Const('b', SetSort(IntSort()))
4961 ctx = _ctx_from_ast_arg_list([a, b])
◆ K()
Return a Z3 constant array expression.
>>> a = K(IntSort(), 10)
>>> a
K(Int, 10)
>>> a.sort()
Array(Int, Int)
>>> i = Int('i')
>>> a[i]
K(Int, 10)[i]
>>> simplify(a[i])
10
Definition at line 4780 of file z3py.py.
4781 """Return a Z3 constant array expression.
4783 >>> a = K(IntSort(), 10)
4795 _z3_assert(
is_sort(dom),
"Z3 sort expected")
4798 v = _py2expr(v, ctx)
◆ Lambda()
| def z3py.Lambda |
( |
|
vs, |
|
|
|
body |
|
) |
| |
Create a Z3 lambda expression.
>>> f = Function('f', IntSort(), IntSort(), IntSort())
>>> mem0 = Array('mem0', IntSort(), IntSort())
>>> lo, hi, e, i = Ints('lo hi e i')
>>> mem1 = Lambda([i], If(And(lo <= i, i <= hi), e, mem0[i]))
>>> mem1
Lambda(i, If(And(lo <= i, i <= hi), e, mem0[i]))
Definition at line 2226 of file z3py.py.
2227 """Create a Z3 lambda expression.
2229 >>> f = Function('f', IntSort(), IntSort(), IntSort())
2230 >>> mem0 = Array('mem0', IntSort(), IntSort())
2231 >>> lo, hi, e, i = Ints('lo hi e i')
2232 >>> mem1 = Lambda([i], If(And(lo <= i, i <= hi), e, mem0[i]))
2234 Lambda(i, If(And(lo <= i, i <= hi), e, mem0[i]))
2240 _vs = (Ast * num_vars)()
2241 for i
in range(num_vars):
2243 _vs[i] = vs[i].as_ast()
2244 return QuantifierRef(
Z3_mk_lambda_const(ctx.ref(), num_vars, _vs, body.as_ast()), ctx)
◆ LastIndexOf()
| def z3py.LastIndexOf |
( |
|
s, |
|
|
|
substr |
|
) |
| |
Retrieve the last index of substring within a string
Definition at line 10843 of file z3py.py.
10844 """Retrieve the last index of substring within a string"""
10846 ctx = _get_ctx2(s, substr, ctx)
10847 s = _coerce_seq(s, ctx)
10848 substr = _coerce_seq(substr, ctx)
◆ Length()
Obtain the length of a sequence 's'
>>> l = Length(StringVal("abc"))
>>> simplify(l)
3
Definition at line 10852 of file z3py.py.
10853 """Obtain the length of a sequence 's'
10854 >>> l = Length(StringVal("abc"))
◆ LinearOrder()
| def z3py.LinearOrder |
( |
|
a, |
|
|
|
index |
|
) |
| |
◆ Loop()
| def z3py.Loop |
( |
|
re, |
|
|
|
lo, |
|
|
|
hi = 0 |
|
) |
| |
Create the regular expression accepting between a lower and upper bound repetitions
>>> re = Loop(Re("a"), 1, 3)
>>> print(simplify(InRe("aa", re)))
True
>>> print(simplify(InRe("aaaa", re)))
False
>>> print(simplify(InRe("", re)))
False
Definition at line 11020 of file z3py.py.
11020 def Loop(re, lo, hi=0):
11021 """Create the regular expression accepting between a lower and upper bound repetitions
11022 >>> re = Loop(Re("a"), 1, 3)
11023 >>> print(simplify(InRe("aa", re)))
11025 >>> print(simplify(InRe("aaaa", re)))
11027 >>> print(simplify(InRe("", re)))
11030 return ReRef(
Z3_mk_re_loop(re.ctx_ref(), re.as_ast(), lo, hi), re.ctx)
◆ LShR()
Create the Z3 expression logical right shift.
Use the operator >> for the arithmetical right shift.
>>> x, y = BitVecs('x y', 32)
>>> LShR(x, y)
LShR(x, y)
>>> (x >> y).sexpr()
'(bvashr x y)'
>>> LShR(x, y).sexpr()
'(bvlshr x y)'
>>> BitVecVal(4, 3)
4
>>> BitVecVal(4, 3).as_signed_long()
-4
>>> simplify(BitVecVal(4, 3) >> 1).as_signed_long()
-2
>>> simplify(BitVecVal(4, 3) >> 1)
6
>>> simplify(LShR(BitVecVal(4, 3), 1))
2
>>> simplify(BitVecVal(2, 3) >> 1)
1
>>> simplify(LShR(BitVecVal(2, 3), 1))
1
Definition at line 4261 of file z3py.py.
4262 """Create the Z3 expression logical right shift.
4264 Use the operator >> for the arithmetical right shift.
4266 >>> x, y = BitVecs('x y', 32)
4269 >>> (x >> y).sexpr()
4271 >>> LShR(x, y).sexpr()
4275 >>> BitVecVal(4, 3).as_signed_long()
4277 >>> simplify(BitVecVal(4, 3) >> 1).as_signed_long()
4279 >>> simplify(BitVecVal(4, 3) >> 1)
4281 >>> simplify(LShR(BitVecVal(4, 3), 1))
4283 >>> simplify(BitVecVal(2, 3) >> 1)
4285 >>> simplify(LShR(BitVecVal(2, 3), 1))
4288 _check_bv_args(a, b)
4289 a, b = _coerce_exprs(a, b)
4290 return BitVecRef(
Z3_mk_bvlshr(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ main_ctx()
Return a reference to the global Z3 context.
>>> x = Real('x')
>>> x.ctx == main_ctx()
True
>>> c = Context()
>>> c == main_ctx()
False
>>> x2 = Real('x', c)
>>> x2.ctx == c
True
>>> eq(x, x2)
False
Definition at line 238 of file z3py.py.
239 """Return a reference to the global Z3 context.
242 >>> x.ctx == main_ctx()
247 >>> x2 = Real('x', c)
254 if _main_ctx
is None:
255 _main_ctx = Context()
Referenced by SeqRef.__gt__(), help_simplify(), and simplify_param_descrs().
◆ Map()
| def z3py.Map |
( |
|
f, |
|
|
* |
args |
|
) |
| |
Return a Z3 map array expression.
>>> f = Function('f', IntSort(), IntSort(), IntSort())
>>> a1 = Array('a1', IntSort(), IntSort())
>>> a2 = Array('a2', IntSort(), IntSort())
>>> b = Map(f, a1, a2)
>>> b
Map(f, a1, a2)
>>> prove(b[0] == f(a1[0], a2[0]))
proved
Definition at line 4757 of file z3py.py.
4758 """Return a Z3 map array expression.
4760 >>> f = Function('f', IntSort(), IntSort(), IntSort())
4761 >>> a1 = Array('a1', IntSort(), IntSort())
4762 >>> a2 = Array('a2', IntSort(), IntSort())
4763 >>> b = Map(f, a1, a2)
4766 >>> prove(b[0] == f(a1[0], a2[0]))
4769 args = _get_args(args)
4771 _z3_assert(len(args) > 0,
"At least one Z3 array expression expected")
4772 _z3_assert(
is_func_decl(f),
"First argument must be a Z3 function declaration")
4773 _z3_assert(all([
is_array(a)
for a
in args]),
"Z3 array expected expected")
4774 _z3_assert(len(args) == f.arity(),
"Number of arguments mismatch")
4775 _args, sz = _to_ast_array(args)
4777 return ArrayRef(
Z3_mk_map(ctx.ref(), f.ast, sz, _args), ctx)
◆ mk_not()
◆ Model()
| def z3py.Model |
( |
|
ctx = None | ) |
|
◆ MultiPattern()
| def z3py.MultiPattern |
( |
* |
args | ) |
|
Create a Z3 multi-pattern using the given expressions `*args`
>>> f = Function('f', IntSort(), IntSort())
>>> g = Function('g', IntSort(), IntSort())
>>> x = Int('x')
>>> q = ForAll(x, f(x) != g(x), patterns = [ MultiPattern(f(x), g(x)) ])
>>> q
ForAll(x, f(x) != g(x))
>>> q.num_patterns()
1
>>> is_pattern(q.pattern(0))
True
>>> q.pattern(0)
MultiPattern(f(Var(0)), g(Var(0)))
Definition at line 1915 of file z3py.py.
1916 """Create a Z3 multi-pattern using the given expressions `*args`
1918 >>> f = Function('f', IntSort(), IntSort())
1919 >>> g = Function('g', IntSort(), IntSort())
1921 >>> q = ForAll(x, f(x) != g(x), patterns = [ MultiPattern(f(x), g(x)) ])
1923 ForAll(x, f(x) != g(x))
1924 >>> q.num_patterns()
1926 >>> is_pattern(q.pattern(0))
1929 MultiPattern(f(Var(0)), g(Var(0)))
1932 _z3_assert(len(args) > 0,
"At least one argument expected")
1933 _z3_assert(all([
is_expr(a)
for a
in args]),
"Z3 expressions expected")
1935 args, sz = _to_ast_array(args)
◆ Not()
| def z3py.Not |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 not expression or probe.
>>> p = Bool('p')
>>> Not(Not(p))
Not(Not(p))
>>> simplify(Not(Not(p)))
p
Definition at line 1779 of file z3py.py.
1779 def Not(a, ctx=None):
1780 """Create a Z3 not expression or probe.
1785 >>> simplify(Not(Not(p)))
1788 ctx = _get_ctx(_ctx_from_ast_arg_list([a], ctx))
1795 return BoolRef(
Z3_mk_not(ctx.ref(), a.as_ast()), ctx)
Referenced by fpNEQ(), mk_not(), and prove().
◆ open_log()
| def z3py.open_log |
( |
|
fname | ) |
|
Log interaction to a file. This function must be invoked immediately after init().
Definition at line 119 of file z3py.py.
120 """Log interaction to a file. This function must be invoked immediately after init(). """
◆ Option()
Create the regular expression that optionally accepts the argument.
>>> re = Option(Re("a"))
>>> print(simplify(InRe("a", re)))
True
>>> print(simplify(InRe("", re)))
True
>>> print(simplify(InRe("aa", re)))
False
Definition at line 10989 of file z3py.py.
10990 """Create the regular expression that optionally accepts the argument.
10991 >>> re = Option(Re("a"))
10992 >>> print(simplify(InRe("a", re)))
10994 >>> print(simplify(InRe("", re)))
10996 >>> print(simplify(InRe("aa", re)))
◆ Or()
Create a Z3 or-expression or or-probe.
>>> p, q, r = Bools('p q r')
>>> Or(p, q, r)
Or(p, q, r)
>>> P = BoolVector('p', 5)
>>> Or(P)
Or(p__0, p__1, p__2, p__3, p__4)
Definition at line 1846 of file z3py.py.
1847 """Create a Z3 or-expression or or-probe.
1849 >>> p, q, r = Bools('p q r')
1852 >>> P = BoolVector('p', 5)
1854 Or(p__0, p__1, p__2, p__3, p__4)
1858 last_arg = args[len(args) - 1]
1859 if isinstance(last_arg, Context):
1860 ctx = args[len(args) - 1]
1861 args = args[:len(args) - 1]
1862 elif len(args) == 1
and isinstance(args[0], AstVector):
1864 args = [a
for a
in args[0]]
1867 args = _get_args(args)
1868 ctx = _get_ctx(_ctx_from_ast_arg_list(args, ctx))
1870 _z3_assert(ctx
is not None,
"At least one of the arguments must be a Z3 expression or probe")
1871 if _has_probe(args):
1872 return _probe_or(args, ctx)
1874 args = _coerce_expr_list(args, ctx)
1875 _args, sz = _to_ast_array(args)
1876 return BoolRef(
Z3_mk_or(ctx.ref(), sz, _args), ctx)
Referenced by ApplyResult.as_expr().
◆ OrElse()
| def z3py.OrElse |
( |
* |
ts, |
|
|
** |
ks |
|
) |
| |
Return a tactic that applies the tactics in `*ts` until one of them succeeds (it doesn't fail).
>>> x = Int('x')
>>> t = OrElse(Tactic('split-clause'), Tactic('skip'))
>>> # Tactic split-clause fails if there is no clause in the given goal.
>>> t(x == 0)
[[x == 0]]
>>> t(Or(x == 0, x == 1))
[[x == 0], [x == 1]]
Definition at line 8204 of file z3py.py.
8205 """Return a tactic that applies the tactics in `*ts` until one of them succeeds (it doesn't fail).
8208 >>> t = OrElse(Tactic('split-clause'), Tactic('skip'))
8209 >>> # Tactic split-clause fails if there is no clause in the given goal.
8212 >>> t(Or(x == 0, x == 1))
8213 [[x == 0], [x == 1]]
8216 _z3_assert(len(ts) >= 2,
"At least two arguments expected")
8217 ctx = ks.get(
"ctx",
None)
8220 for i
in range(num - 1):
8221 r = _or_else(r, ts[i + 1], ctx)
◆ ParAndThen()
| def z3py.ParAndThen |
( |
|
t1, |
|
|
|
t2, |
|
|
|
ctx = None |
|
) |
| |
Alias for ParThen(t1, t2, ctx).
Definition at line 8260 of file z3py.py.
8261 """Alias for ParThen(t1, t2, ctx)."""
◆ ParOr()
| def z3py.ParOr |
( |
* |
ts, |
|
|
** |
ks |
|
) |
| |
Return a tactic that applies the tactics in `*ts` in parallel until one of them succeeds (it doesn't fail).
>>> x = Int('x')
>>> t = ParOr(Tactic('simplify'), Tactic('fail'))
>>> t(x + 1 == 2)
[[x == 1]]
Definition at line 8225 of file z3py.py.
8225 def ParOr(*ts, **ks):
8226 """Return a tactic that applies the tactics in `*ts` in parallel until one of them succeeds (it doesn't fail).
8229 >>> t = ParOr(Tactic('simplify'), Tactic('fail'))
8234 _z3_assert(len(ts) >= 2,
"At least two arguments expected")
8235 ctx = _get_ctx(ks.get(
"ctx",
None))
8236 ts = [_to_tactic(t, ctx)
for t
in ts]
8238 _args = (TacticObj * sz)()
8240 _args[i] = ts[i].tactic
◆ parse_smt2_file()
| def z3py.parse_smt2_file |
( |
|
f, |
|
|
|
sorts = {}, |
|
|
|
decls = {}, |
|
|
|
ctx = None |
|
) |
| |
Parse a file in SMT 2.0 format using the given sorts and decls.
This function is similar to parse_smt2_string().
Definition at line 9092 of file z3py.py.
9093 """Parse a file in SMT 2.0 format using the given sorts and decls.
9095 This function is similar to parse_smt2_string().
9098 ssz, snames, ssorts = _dict2sarray(sorts, ctx)
9099 dsz, dnames, ddecls = _dict2darray(decls, ctx)
9100 return AstVector(
Z3_parse_smtlib2_file(ctx.ref(), f, ssz, snames, ssorts, dsz, dnames, ddecls), ctx)
◆ parse_smt2_string()
| def z3py.parse_smt2_string |
( |
|
s, |
|
|
|
sorts = {}, |
|
|
|
decls = {}, |
|
|
|
ctx = None |
|
) |
| |
Parse a string in SMT 2.0 format using the given sorts and decls.
The arguments sorts and decls are Python dictionaries used to initialize
the symbol table used for the SMT 2.0 parser.
>>> parse_smt2_string('(declare-const x Int) (assert (> x 0)) (assert (< x 10))')
[x > 0, x < 10]
>>> x, y = Ints('x y')
>>> f = Function('f', IntSort(), IntSort())
>>> parse_smt2_string('(assert (> (+ foo (g bar)) 0))', decls={ 'foo' : x, 'bar' : y, 'g' : f})
[x + f(y) > 0]
>>> parse_smt2_string('(declare-const a U) (assert (> a 0))', sorts={ 'U' : IntSort() })
[a > 0]
Definition at line 9071 of file z3py.py.
9072 """Parse a string in SMT 2.0 format using the given sorts and decls.
9074 The arguments sorts and decls are Python dictionaries used to initialize
9075 the symbol table used for the SMT 2.0 parser.
9077 >>> parse_smt2_string('(declare-const x Int) (assert (> x 0)) (assert (< x 10))')
9079 >>> x, y = Ints('x y')
9080 >>> f = Function('f', IntSort(), IntSort())
9081 >>> parse_smt2_string('(assert (> (+ foo (g bar)) 0))', decls={ 'foo' : x, 'bar' : y, 'g' : f})
9083 >>> parse_smt2_string('(declare-const a U) (assert (> a 0))', sorts={ 'U' : IntSort() })
9087 ssz, snames, ssorts = _dict2sarray(sorts, ctx)
9088 dsz, dnames, ddecls = _dict2darray(decls, ctx)
◆ ParThen()
| def z3py.ParThen |
( |
|
t1, |
|
|
|
t2, |
|
|
|
ctx = None |
|
) |
| |
Return a tactic that applies t1 and then t2 to every subgoal produced by t1.
The subgoals are processed in parallel.
>>> x, y = Ints('x y')
>>> t = ParThen(Tactic('split-clause'), Tactic('propagate-values'))
>>> t(And(Or(x == 1, x == 2), y == x + 1))
[[x == 1, y == 2], [x == 2, y == 3]]
Definition at line 8244 of file z3py.py.
8244 def ParThen(t1, t2, ctx=None):
8245 """Return a tactic that applies t1 and then t2 to every subgoal produced by t1.
8246 The subgoals are processed in parallel.
8248 >>> x, y = Ints('x y')
8249 >>> t = ParThen(Tactic('split-clause'), Tactic('propagate-values'))
8250 >>> t(And(Or(x == 1, x == 2), y == x + 1))
8251 [[x == 1, y == 2], [x == 2, y == 3]]
8253 t1 = _to_tactic(t1, ctx)
8254 t2 = _to_tactic(t2, ctx)
8256 _z3_assert(t1.ctx == t2.ctx,
"Context mismatch")
Referenced by ParAndThen().
◆ PartialOrder()
| def z3py.PartialOrder |
( |
|
a, |
|
|
|
index |
|
) |
| |
◆ PbEq()
| def z3py.PbEq |
( |
|
args, |
|
|
|
k, |
|
|
|
ctx = None |
|
) |
| |
Create a Pseudo-Boolean inequality k constraint.
>>> a, b, c = Bools('a b c')
>>> f = PbEq(((a,1),(b,3),(c,2)), 3)
Definition at line 8867 of file z3py.py.
8867 def PbEq(args, k, ctx=None):
8868 """Create a Pseudo-Boolean inequality k constraint.
8870 >>> a, b, c = Bools('a b c')
8871 >>> f = PbEq(((a,1),(b,3),(c,2)), 3)
8873 _z3_check_cint_overflow(k,
"k")
8874 ctx, sz, _args, _coeffs = _pb_args_coeffs(args)
8875 return BoolRef(
Z3_mk_pbeq(ctx.ref(), sz, _args, _coeffs, k), ctx)
◆ PbGe()
| def z3py.PbGe |
( |
|
args, |
|
|
|
k |
|
) |
| |
Create a Pseudo-Boolean inequality k constraint.
>>> a, b, c = Bools('a b c')
>>> f = PbGe(((a,1),(b,3),(c,2)), 3)
Definition at line 8856 of file z3py.py.
8857 """Create a Pseudo-Boolean inequality k constraint.
8859 >>> a, b, c = Bools('a b c')
8860 >>> f = PbGe(((a,1),(b,3),(c,2)), 3)
8862 _z3_check_cint_overflow(k,
"k")
8863 ctx, sz, _args, _coeffs = _pb_args_coeffs(args)
8864 return BoolRef(
Z3_mk_pbge(ctx.ref(), sz, _args, _coeffs, k), ctx)
◆ PbLe()
| def z3py.PbLe |
( |
|
args, |
|
|
|
k |
|
) |
| |
Create a Pseudo-Boolean inequality k constraint.
>>> a, b, c = Bools('a b c')
>>> f = PbLe(((a,1),(b,3),(c,2)), 3)
Definition at line 8845 of file z3py.py.
8846 """Create a Pseudo-Boolean inequality k constraint.
8848 >>> a, b, c = Bools('a b c')
8849 >>> f = PbLe(((a,1),(b,3),(c,2)), 3)
8851 _z3_check_cint_overflow(k,
"k")
8852 ctx, sz, _args, _coeffs = _pb_args_coeffs(args)
8853 return BoolRef(
Z3_mk_pble(ctx.ref(), sz, _args, _coeffs, k), ctx)
◆ PiecewiseLinearOrder()
| def z3py.PiecewiseLinearOrder |
( |
|
a, |
|
|
|
index |
|
) |
| |
◆ Plus()
Create the regular expression accepting one or more repetitions of argument.
>>> re = Plus(Re("a"))
>>> print(simplify(InRe("aa", re)))
True
>>> print(simplify(InRe("ab", re)))
False
>>> print(simplify(InRe("", re)))
False
Definition at line 10976 of file z3py.py.
10977 """Create the regular expression accepting one or more repetitions of argument.
10978 >>> re = Plus(Re("a"))
10979 >>> print(simplify(InRe("aa", re)))
10981 >>> print(simplify(InRe("ab", re)))
10983 >>> print(simplify(InRe("", re)))
10986 return ReRef(
Z3_mk_re_plus(re.ctx_ref(), re.as_ast()), re.ctx)
◆ PrefixOf()
| def z3py.PrefixOf |
( |
|
a, |
|
|
|
b |
|
) |
| |
Check if 'a' is a prefix of 'b'
>>> s1 = PrefixOf("ab", "abc")
>>> simplify(s1)
True
>>> s2 = PrefixOf("bc", "abc")
>>> simplify(s2)
False
Definition at line 10759 of file z3py.py.
10760 """Check if 'a' is a prefix of 'b'
10761 >>> s1 = PrefixOf("ab", "abc")
10764 >>> s2 = PrefixOf("bc", "abc")
10768 ctx = _get_ctx2(a, b)
10769 a = _coerce_seq(a, ctx)
10770 b = _coerce_seq(b, ctx)
10771 return BoolRef(
Z3_mk_seq_prefix(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ probe_description()
| def z3py.probe_description |
( |
|
name, |
|
|
|
ctx = None |
|
) |
| |
Return a short description for the probe named `name`.
>>> d = probe_description('memory')
Definition at line 8540 of file z3py.py.
8541 """Return a short description for the probe named `name`.
8543 >>> d = probe_description('memory')
Referenced by describe_probes().
◆ probes()
| def z3py.probes |
( |
|
ctx = None | ) |
|
Return a list of all available probes in Z3.
>>> l = probes()
>>> l.count('memory') == 1
True
Definition at line 8529 of file z3py.py.
8530 """Return a list of all available probes in Z3.
8533 >>> l.count('memory') == 1
Referenced by describe_probes().
◆ Product()
| def z3py.Product |
( |
* |
args | ) |
|
Create the product of the Z3 expressions.
>>> a, b, c = Ints('a b c')
>>> Product(a, b, c)
a*b*c
>>> Product([a, b, c])
a*b*c
>>> A = IntVector('a', 5)
>>> Product(A)
a__0*a__1*a__2*a__3*a__4
Definition at line 8756 of file z3py.py.
8757 """Create the product of the Z3 expressions.
8759 >>> a, b, c = Ints('a b c')
8760 >>> Product(a, b, c)
8762 >>> Product([a, b, c])
8764 >>> A = IntVector('a', 5)
8766 a__0*a__1*a__2*a__3*a__4
8768 args = _get_args(args)
8771 ctx = _ctx_from_ast_arg_list(args)
8773 return _reduce(
lambda a, b: a * b, args, 1)
8774 args = _coerce_expr_list(args, ctx)
8776 return _reduce(
lambda a, b: a * b, args, 1)
8778 _args, sz = _to_ast_array(args)
8779 return ArithRef(
Z3_mk_mul(ctx.ref(), sz, _args), ctx)
◆ prove()
| def z3py.prove |
( |
|
claim, |
|
|
|
show = False, |
|
|
** |
keywords |
|
) |
| |
Try to prove the given claim.
This is a simple function for creating demonstrations. It tries to prove
`claim` by showing the negation is unsatisfiable.
>>> p, q = Bools('p q')
>>> prove(Not(And(p, q)) == Or(Not(p), Not(q)))
proved
Definition at line 8939 of file z3py.py.
8939 def prove(claim, show=False, **keywords):
8940 """Try to prove the given claim.
8942 This is a simple function for creating demonstrations. It tries to prove
8943 `claim` by showing the negation is unsatisfiable.
8945 >>> p, q = Bools('p q')
8946 >>> prove(Not(And(p, q)) == Or(Not(p), Not(q)))
8950 _z3_assert(
is_bool(claim),
"Z3 Boolean expression expected")
8960 print(
"failed to prove")
8963 print(
"counterexample")
◆ Q()
| def z3py.Q |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Return a Z3 rational a/b.
If `ctx=None`, then the global context is used.
>>> Q(3,5)
3/5
>>> Q(3,5).sort()
Real
Definition at line 3197 of file z3py.py.
3197 def Q(a, b, ctx=None):
3198 """Return a Z3 rational a/b.
3200 If `ctx=None`, then the global context is used.
◆ Range()
| def z3py.Range |
( |
|
lo, |
|
|
|
hi, |
|
|
|
ctx = None |
|
) |
| |
Create the range regular expression over two sequences of length 1
>>> range = Range("a","z")
>>> print(simplify(InRe("b", range)))
True
>>> print(simplify(InRe("bb", range)))
False
Definition at line 11033 of file z3py.py.
11033 def Range(lo, hi, ctx=None):
11034 """Create the range regular expression over two sequences of length 1
11035 >>> range = Range("a","z")
11036 >>> print(simplify(InRe("b", range)))
11038 >>> print(simplify(InRe("bb", range)))
11041 lo = _coerce_seq(lo, ctx)
11042 hi = _coerce_seq(hi, ctx)
11043 return ReRef(
Z3_mk_re_range(lo.ctx_ref(), lo.ast, hi.ast), lo.ctx)
◆ RatVal()
| def z3py.RatVal |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Return a Z3 rational a/b.
If `ctx=None`, then the global context is used.
>>> RatVal(3,5)
3/5
>>> RatVal(3,5).sort()
Real
Definition at line 3181 of file z3py.py.
3181 def RatVal(a, b, ctx=None):
3182 """Return a Z3 rational a/b.
3184 If `ctx=None`, then the global context is used.
3188 >>> RatVal(3,5).sort()
3192 _z3_assert(_is_int(a)
or isinstance(a, str),
"First argument cannot be converted into an integer")
3193 _z3_assert(_is_int(b)
or isinstance(b, str),
"Second argument cannot be converted into an integer")
Referenced by Q().
◆ Re()
| def z3py.Re |
( |
|
s, |
|
|
|
ctx = None |
|
) |
| |
The regular expression that accepts sequence 's'
>>> s1 = Re("ab")
>>> s2 = Re(StringVal("ab"))
>>> s3 = Re(Unit(BoolVal(True)))
Definition at line 10885 of file z3py.py.
10885 def Re(s, ctx=None):
10886 """The regular expression that accepts sequence 's'
10888 >>> s2 = Re(StringVal("ab"))
10889 >>> s3 = Re(Unit(BoolVal(True)))
10891 s = _coerce_seq(s, ctx)
◆ Real()
| def z3py.Real |
( |
|
name, |
|
|
|
ctx = None |
|
) |
| |
Return a real constant named `name`. If `ctx=None`, then the global context is used.
>>> x = Real('x')
>>> is_real(x)
True
>>> is_real(x + 1)
True
Definition at line 3263 of file z3py.py.
3263 def Real(name, ctx=None):
3264 """Return a real constant named `name`. If `ctx=None`, then the global context is used.
Referenced by Reals(), and RealVector().
◆ Reals()
| def z3py.Reals |
( |
|
names, |
|
|
|
ctx = None |
|
) |
| |
Return a tuple of real constants.
>>> x, y, z = Reals('x y z')
>>> Sum(x, y, z)
x + y + z
>>> Sum(x, y, z).sort()
Real
Definition at line 3276 of file z3py.py.
3276 def Reals(names, ctx=None):
3277 """Return a tuple of real constants.
3279 >>> x, y, z = Reals('x y z')
3282 >>> Sum(x, y, z).sort()
3286 if isinstance(names, str):
3287 names = names.split(
" ")
3288 return [
Real(name, ctx)
for name
in names]
◆ RealSort()
| def z3py.RealSort |
( |
|
ctx = None | ) |
|
Return the real sort in the given context. If `ctx=None`, then the global context is used.
>>> RealSort()
Real
>>> x = Const('x', RealSort())
>>> is_real(x)
True
>>> is_int(x)
False
>>> x.sort() == RealSort()
True
Definition at line 3117 of file z3py.py.
3118 """Return the real sort in the given context. If `ctx=None`, then the global context is used.
3122 >>> x = Const('x', RealSort())
3127 >>> x.sort() == RealSort()
Referenced by FreshReal(), Real(), RealVal(), and RealVar().
◆ RealVal()
| def z3py.RealVal |
( |
|
val, |
|
|
|
ctx = None |
|
) |
| |
Return a Z3 real value.
`val` may be a Python int, long, float or string representing a number in decimal or rational notation.
If `ctx=None`, then the global context is used.
>>> RealVal(1)
1
>>> RealVal(1).sort()
Real
>>> RealVal("3/5")
3/5
>>> RealVal("1.5")
3/2
Definition at line 3162 of file z3py.py.
3163 """Return a Z3 real value.
3165 `val` may be a Python int, long, float or string representing a number in decimal or rational notation.
3166 If `ctx=None`, then the global context is used.
3170 >>> RealVal(1).sort()
Referenced by Cbrt(), AlgebraicNumRef.index(), RatVal(), and Sqrt().
◆ RealVar()
| def z3py.RealVar |
( |
|
idx, |
|
|
|
ctx = None |
|
) |
| |
Create a real free variable. Free variables are used to create quantified formulas.
They are also used to create polynomials.
>>> RealVar(0)
Var(0)
Definition at line 1451 of file z3py.py.
1453 Create a real free variable. Free variables are used to create quantified formulas.
1454 They are also used to create polynomials.
Referenced by RealVarVector().
◆ RealVarVector()
| def z3py.RealVarVector |
( |
|
n, |
|
|
|
ctx = None |
|
) |
| |
Create a list of Real free variables.
The variables have ids: 0, 1, ..., n-1
>>> x0, x1, x2, x3 = RealVarVector(4)
>>> x2
Var(2)
Definition at line 1462 of file z3py.py.
1464 Create a list of Real free variables.
1465 The variables have ids: 0, 1, ..., n-1
1467 >>> x0, x1, x2, x3 = RealVarVector(4)
◆ RealVector()
| def z3py.RealVector |
( |
|
prefix, |
|
|
|
sz, |
|
|
|
ctx = None |
|
) |
| |
Return a list of real constants of size `sz`.
>>> X = RealVector('x', 3)
>>> X
[x__0, x__1, x__2]
>>> Sum(X)
x__0 + x__1 + x__2
>>> Sum(X).sort()
Real
Definition at line 3291 of file z3py.py.
3292 """Return a list of real constants of size `sz`.
3294 >>> X = RealVector('x', 3)
3303 return [
Real(
"%s__%s" % (prefix, i), ctx)
for i
in range(sz)]
◆ RecAddDefinition()
| def z3py.RecAddDefinition |
( |
|
f, |
|
|
|
args, |
|
|
|
body |
|
) |
| |
Set the body of a recursive function.
Recursive definitions can be simplified if they are applied to ground
arguments.
>>> ctx = Context()
>>> fac = RecFunction('fac', IntSort(ctx), IntSort(ctx))
>>> n = Int('n', ctx)
>>> RecAddDefinition(fac, n, If(n == 0, 1, n*fac(n-1)))
>>> simplify(fac(5))
120
>>> s = Solver(ctx=ctx)
>>> s.add(fac(n) < 3)
>>> s.check()
sat
>>> s.model().eval(fac(5))
120
Definition at line 924 of file z3py.py.
925 """Set the body of a recursive function.
926 Recursive definitions can be simplified if they are applied to ground
929 >>> fac = RecFunction('fac', IntSort(ctx), IntSort(ctx))
930 >>> n = Int('n', ctx)
931 >>> RecAddDefinition(fac, n, If(n == 0, 1, n*fac(n-1)))
934 >>> s = Solver(ctx=ctx)
935 >>> s.add(fac(n) < 3)
938 >>> s.model().eval(fac(5))
944 args = _get_args(args)
948 _args[i] = args[i].ast
◆ RecFunction()
| def z3py.RecFunction |
( |
|
name, |
|
|
* |
sig |
|
) |
| |
Create a new Z3 recursive with the given sorts.
Definition at line 906 of file z3py.py.
907 """Create a new Z3 recursive with the given sorts."""
910 _z3_assert(len(sig) > 0,
"At least two arguments expected")
914 _z3_assert(
is_sort(rng),
"Z3 sort expected")
915 dom = (Sort * arity)()
916 for i
in range(arity):
918 _z3_assert(
is_sort(sig[i]),
"Z3 sort expected")
◆ Repeat()
| def z3py.Repeat |
( |
|
t, |
|
|
|
max = 4294967295, |
|
|
|
ctx = None |
|
) |
| |
Return a tactic that keeps applying `t` until the goal is not modified anymore
or the maximum number of iterations `max` is reached.
>>> x, y = Ints('x y')
>>> c = And(Or(x == 0, x == 1), Or(y == 0, y == 1), x > y)
>>> t = Repeat(OrElse(Tactic('split-clause'), Tactic('skip')))
>>> r = t(c)
>>> for subgoal in r: print(subgoal)
[x == 0, y == 0, x > y]
[x == 0, y == 1, x > y]
[x == 1, y == 0, x > y]
[x == 1, y == 1, x > y]
>>> t = Then(t, Tactic('propagate-values'))
>>> t(c)
[[x == 1, y == 0]]
Definition at line 8293 of file z3py.py.
8293 def Repeat(t, max=4294967295, ctx=None):
8294 """Return a tactic that keeps applying `t` until the goal is not modified anymore
8295 or the maximum number of iterations `max` is reached.
8297 >>> x, y = Ints('x y')
8298 >>> c = And(Or(x == 0, x == 1), Or(y == 0, y == 1), x > y)
8299 >>> t = Repeat(OrElse(Tactic('split-clause'), Tactic('skip')))
8301 >>> for subgoal in r: print(subgoal)
8302 [x == 0, y == 0, x > y]
8303 [x == 0, y == 1, x > y]
8304 [x == 1, y == 0, x > y]
8305 [x == 1, y == 1, x > y]
8306 >>> t = Then(t, Tactic('propagate-values'))
8310 t = _to_tactic(t, ctx)
◆ RepeatBitVec()
| def z3py.RepeatBitVec |
( |
|
n, |
|
|
|
a |
|
) |
| |
Return an expression representing `n` copies of `a`.
>>> x = BitVec('x', 8)
>>> n = RepeatBitVec(4, x)
>>> n
RepeatBitVec(4, x)
>>> n.size()
32
>>> v0 = BitVecVal(10, 4)
>>> print("%.x" % v0.as_long())
a
>>> v = simplify(RepeatBitVec(4, v0))
>>> v.size()
16
>>> print("%.x" % v.as_long())
aaaa
Definition at line 4383 of file z3py.py.
4384 """Return an expression representing `n` copies of `a`.
4386 >>> x = BitVec('x', 8)
4387 >>> n = RepeatBitVec(4, x)
4392 >>> v0 = BitVecVal(10, 4)
4393 >>> print("%.x" % v0.as_long())
4395 >>> v = simplify(RepeatBitVec(4, v0))
4398 >>> print("%.x" % v.as_long())
4402 _z3_assert(_is_int(n),
"First argument must be an integer")
4403 _z3_assert(
is_bv(a),
"Second argument must be a Z3 bit-vector expression")
4404 return BitVecRef(
Z3_mk_repeat(a.ctx_ref(), n, a.as_ast()), a.ctx)
◆ Replace()
| def z3py.Replace |
( |
|
s, |
|
|
|
src, |
|
|
|
dst |
|
) |
| |
Replace the first occurrence of 'src' by 'dst' in 's'
>>> r = Replace("aaa", "a", "b")
>>> simplify(r)
"baa"
Definition at line 10808 of file z3py.py.
10809 """Replace the first occurrence of 'src' by 'dst' in 's'
10810 >>> r = Replace("aaa", "a", "b")
10814 ctx = _get_ctx2(dst, s)
10815 if ctx
is None and is_expr(src):
10817 src = _coerce_seq(src, ctx)
10818 dst = _coerce_seq(dst, ctx)
10819 s = _coerce_seq(s, ctx)
10820 return SeqRef(
Z3_mk_seq_replace(src.ctx_ref(), s.as_ast(), src.as_ast(), dst.as_ast()), s.ctx)
◆ reset_params()
| def z3py.reset_params |
( |
| ) |
|
Reset all global (or module) parameters.
Definition at line 294 of file z3py.py.
295 """Reset all global (or module) parameters.
◆ ReSort()
Definition at line 10904 of file z3py.py.
10907 if s
is None or isinstance(s, Context):
10910 raise Z3Exception(
"Regular expression sort constructor expects either a string or a context or no argument")
◆ RNA()
| def z3py.RNA |
( |
|
ctx = None | ) |
|
◆ RNE()
| def z3py.RNE |
( |
|
ctx = None | ) |
|
◆ RotateLeft()
| def z3py.RotateLeft |
( |
|
a, |
|
|
|
b |
|
) |
| |
Return an expression representing `a` rotated to the left `b` times.
>>> a, b = BitVecs('a b', 16)
>>> RotateLeft(a, b)
RotateLeft(a, b)
>>> simplify(RotateLeft(a, 0))
a
>>> simplify(RotateLeft(a, 16))
a
Definition at line 4293 of file z3py.py.
4294 """Return an expression representing `a` rotated to the left `b` times.
4296 >>> a, b = BitVecs('a b', 16)
4297 >>> RotateLeft(a, b)
4299 >>> simplify(RotateLeft(a, 0))
4301 >>> simplify(RotateLeft(a, 16))
4304 _check_bv_args(a, b)
4305 a, b = _coerce_exprs(a, b)
◆ RotateRight()
| def z3py.RotateRight |
( |
|
a, |
|
|
|
b |
|
) |
| |
Return an expression representing `a` rotated to the right `b` times.
>>> a, b = BitVecs('a b', 16)
>>> RotateRight(a, b)
RotateRight(a, b)
>>> simplify(RotateRight(a, 0))
a
>>> simplify(RotateRight(a, 16))
a
Definition at line 4309 of file z3py.py.
4310 """Return an expression representing `a` rotated to the right `b` times.
4312 >>> a, b = BitVecs('a b', 16)
4313 >>> RotateRight(a, b)
4315 >>> simplify(RotateRight(a, 0))
4317 >>> simplify(RotateRight(a, 16))
4320 _check_bv_args(a, b)
4321 a, b = _coerce_exprs(a, b)
◆ RoundNearestTiesToAway()
| def z3py.RoundNearestTiesToAway |
( |
|
ctx = None | ) |
|
◆ RoundNearestTiesToEven()
| def z3py.RoundNearestTiesToEven |
( |
|
ctx = None | ) |
|
◆ RoundTowardNegative()
| def z3py.RoundTowardNegative |
( |
|
ctx = None | ) |
|
◆ RoundTowardPositive()
| def z3py.RoundTowardPositive |
( |
|
ctx = None | ) |
|
◆ RoundTowardZero()
| def z3py.RoundTowardZero |
( |
|
ctx = None | ) |
|
◆ RTN()
| def z3py.RTN |
( |
|
ctx = None | ) |
|
◆ RTP()
| def z3py.RTP |
( |
|
ctx = None | ) |
|
◆ RTZ()
| def z3py.RTZ |
( |
|
ctx = None | ) |
|
◆ Select()
Return a Z3 select array expression.
>>> a = Array('a', IntSort(), IntSort())
>>> i = Int('i')
>>> Select(a, i)
a[i]
>>> eq(Select(a, i), a[i])
True
Definition at line 4742 of file z3py.py.
4743 """Return a Z3 select array expression.
4745 >>> a = Array('a', IntSort(), IntSort())
4749 >>> eq(Select(a, i), a[i])
4753 _z3_assert(
is_array_sort(a),
"First argument must be a Z3 array expression")
◆ SeqSort()
Create a sequence sort over elements provided in the argument
>>> s = SeqSort(IntSort())
>>> s == Unit(IntVal(1)).sort()
True
Definition at line 10579 of file z3py.py.
10580 """Create a sequence sort over elements provided in the argument
10581 >>> s = SeqSort(IntSort())
10582 >>> s == Unit(IntVal(1)).sort()
◆ set_default_fp_sort()
| def z3py.set_default_fp_sort |
( |
|
ebits, |
|
|
|
sbits, |
|
|
|
ctx = None |
|
) |
| |
Definition at line 9153 of file z3py.py.
9154 global _dflt_fpsort_ebits
9155 global _dflt_fpsort_sbits
9156 _dflt_fpsort_ebits = ebits
9157 _dflt_fpsort_sbits = sbits
◆ set_default_rounding_mode()
| def z3py.set_default_rounding_mode |
( |
|
rm, |
|
|
|
ctx = None |
|
) |
| |
Definition at line 9140 of file z3py.py.
9141 global _dflt_rounding_mode
9143 _dflt_rounding_mode = rm.decl().kind()
9145 _z3_assert(_dflt_rounding_mode
in _ROUNDING_MODES,
"illegal rounding mode")
9146 _dflt_rounding_mode = rm
◆ set_option()
| def z3py.set_option |
( |
* |
args, |
|
|
** |
kws |
|
) |
| |
Alias for 'set_param' for backward compatibility.
Definition at line 300 of file z3py.py.
301 """Alias for 'set_param' for backward compatibility.
◆ set_param()
| def z3py.set_param |
( |
* |
args, |
|
|
** |
kws |
|
) |
| |
Set Z3 global (or module) parameters.
>>> set_param(precision=10)
Definition at line 270 of file z3py.py.
271 """Set Z3 global (or module) parameters.
273 >>> set_param(precision=10)
276 _z3_assert(len(args) % 2 == 0,
"Argument list must have an even number of elements.")
280 if not set_pp_option(k, v):
Referenced by set_option().
◆ SetAdd()
Add element e to set s
>>> a = Const('a', SetSort(IntSort()))
>>> SetAdd(a, 1)
Store(a, 1, True)
Definition at line 4900 of file z3py.py.
4901 """ Add element e to set s
4902 >>> a = Const('a', SetSort(IntSort()))
4906 ctx = _ctx_from_ast_arg_list([s, e])
4907 e = _py2expr(e, ctx)
4908 return ArrayRef(
Z3_mk_set_add(ctx.ref(), s.as_ast(), e.as_ast()), ctx)
◆ SetComplement()
| def z3py.SetComplement |
( |
|
s | ) |
|
The complement of set s
>>> a = Const('a', SetSort(IntSort()))
>>> SetComplement(a)
complement(a)
Definition at line 4922 of file z3py.py.
4923 """ The complement of set s
4924 >>> a = Const('a', SetSort(IntSort()))
4925 >>> SetComplement(a)
◆ SetDel()
Remove element e to set s
>>> a = Const('a', SetSort(IntSort()))
>>> SetDel(a, 1)
Store(a, 1, False)
Definition at line 4911 of file z3py.py.
4912 """ Remove element e to set s
4913 >>> a = Const('a', SetSort(IntSort()))
4917 ctx = _ctx_from_ast_arg_list([s, e])
4918 e = _py2expr(e, ctx)
4919 return ArrayRef(
Z3_mk_set_del(ctx.ref(), s.as_ast(), e.as_ast()), ctx)
◆ SetDifference()
| def z3py.SetDifference |
( |
|
a, |
|
|
|
b |
|
) |
| |
The set difference of a and b
>>> a = Const('a', SetSort(IntSort()))
>>> b = Const('b', SetSort(IntSort()))
>>> SetDifference(a, b)
setminus(a, b)
Definition at line 4932 of file z3py.py.
4933 """ The set difference of a and b
4934 >>> a = Const('a', SetSort(IntSort()))
4935 >>> b = Const('b', SetSort(IntSort()))
4936 >>> SetDifference(a, b)
4939 ctx = _ctx_from_ast_arg_list([a, b])
◆ SetHasSize()
| def z3py.SetHasSize |
( |
|
a, |
|
|
|
k |
|
) |
| |
Definition at line 4814 of file z3py.py.
4816 k = _py2expr(k, ctx)
◆ SetIntersect()
| def z3py.SetIntersect |
( |
* |
args | ) |
|
Take the union of sets
>>> a = Const('a', SetSort(IntSort()))
>>> b = Const('b', SetSort(IntSort()))
>>> SetIntersect(a, b)
intersection(a, b)
Definition at line 4887 of file z3py.py.
4888 """ Take the union of sets
4889 >>> a = Const('a', SetSort(IntSort()))
4890 >>> b = Const('b', SetSort(IntSort()))
4891 >>> SetIntersect(a, b)
4894 args = _get_args(args)
4895 ctx = _ctx_from_ast_arg_list(args)
4896 _args, sz = _to_ast_array(args)
◆ SetSort()
Sets.
Create a set sort over element sort s
Definition at line 4851 of file z3py.py.
4852 """ Create a set sort over element sort s"""
◆ SetUnion()
| def z3py.SetUnion |
( |
* |
args | ) |
|
Take the union of sets
>>> a = Const('a', SetSort(IntSort()))
>>> b = Const('b', SetSort(IntSort()))
>>> SetUnion(a, b)
union(a, b)
Definition at line 4874 of file z3py.py.
4875 """ Take the union of sets
4876 >>> a = Const('a', SetSort(IntSort()))
4877 >>> b = Const('b', SetSort(IntSort()))
4881 args = _get_args(args)
4882 ctx = _ctx_from_ast_arg_list(args)
4883 _args, sz = _to_ast_array(args)
◆ SignExt()
| def z3py.SignExt |
( |
|
n, |
|
|
|
a |
|
) |
| |
Return a bit-vector expression with `n` extra sign-bits.
>>> x = BitVec('x', 16)
>>> n = SignExt(8, x)
>>> n.size()
24
>>> n
SignExt(8, x)
>>> n.sort()
BitVec(24)
>>> v0 = BitVecVal(2, 2)
>>> v0
2
>>> v0.size()
2
>>> v = simplify(SignExt(6, v0))
>>> v
254
>>> v.size()
8
>>> print("%.x" % v.as_long())
fe
Definition at line 4325 of file z3py.py.
4326 """Return a bit-vector expression with `n` extra sign-bits.
4328 >>> x = BitVec('x', 16)
4329 >>> n = SignExt(8, x)
4336 >>> v0 = BitVecVal(2, 2)
4341 >>> v = simplify(SignExt(6, v0))
4346 >>> print("%.x" % v.as_long())
4350 _z3_assert(_is_int(n),
"First argument must be an integer")
4351 _z3_assert(
is_bv(a),
"Second argument must be a Z3 bit-vector expression")
4352 return BitVecRef(
Z3_mk_sign_ext(a.ctx_ref(), n, a.as_ast()), a.ctx)
◆ SimpleSolver()
| def z3py.SimpleSolver |
( |
|
ctx = None, |
|
|
|
logFile = None |
|
) |
| |
Return a simple general purpose solver with limited amount of preprocessing.
>>> s = SimpleSolver()
>>> x = Int('x')
>>> s.add(x > 0)
>>> s.check()
sat
Definition at line 7293 of file z3py.py.
7294 """Return a simple general purpose solver with limited amount of preprocessing.
7296 >>> s = SimpleSolver()
◆ simplify()
| def z3py.simplify |
( |
|
a, |
|
|
* |
arguments, |
|
|
** |
keywords |
|
) |
| |
Utils.
Simplify the expression `a` using the given options.
This function has many options. Use `help_simplify` to obtain the complete list.
>>> x = Int('x')
>>> y = Int('y')
>>> simplify(x + 1 + y + x + 1)
2 + 2*x + y
>>> simplify((x + 1)*(y + 1), som=True)
1 + x + y + x*y
>>> simplify(Distinct(x, y, 1), blast_distinct=True)
And(Not(x == y), Not(x == 1), Not(y == 1))
>>> simplify(And(x == 0, y == 1), elim_and=True)
Not(Or(Not(x == 0), Not(y == 1)))
Definition at line 8645 of file z3py.py.
8645 def simplify(a, *arguments, **keywords):
8646 """Simplify the expression `a` using the given options.
8648 This function has many options. Use `help_simplify` to obtain the complete list.
8652 >>> simplify(x + 1 + y + x + 1)
8654 >>> simplify((x + 1)*(y + 1), som=True)
8656 >>> simplify(Distinct(x, y, 1), blast_distinct=True)
8657 And(Not(x == y), Not(x == 1), Not(y == 1))
8658 >>> simplify(And(x == 0, y == 1), elim_and=True)
8659 Not(Or(Not(x == 0), Not(y == 1)))
8662 _z3_assert(
is_expr(a),
"Z3 expression expected")
8663 if len(arguments) > 0
or len(keywords) > 0:
8665 return _to_expr_ref(
Z3_simplify_ex(a.ctx_ref(), a.as_ast(), p.params), a.ctx)
8667 return _to_expr_ref(
Z3_simplify(a.ctx_ref(), a.as_ast()), a.ctx)
Referenced by Q(), and RatVal().
◆ simplify_param_descrs()
| def z3py.simplify_param_descrs |
( |
| ) |
|
Return the set of parameter descriptions for Z3 `simplify` procedure.
Definition at line 8675 of file z3py.py.
8676 """Return the set of parameter descriptions for Z3 `simplify` procedure."""
◆ solve()
| def z3py.solve |
( |
* |
args, |
|
|
** |
keywords |
|
) |
| |
Solve the constraints `*args`.
This is a simple function for creating demonstrations. It creates a solver,
configure it using the options in `keywords`, adds the constraints
in `args`, and invokes check.
>>> a = Int('a')
>>> solve(a > 0, a < 2)
[a = 1]
Definition at line 8878 of file z3py.py.
8878 def solve(*args, **keywords):
8879 """Solve the constraints `*args`.
8881 This is a simple function for creating demonstrations. It creates a solver,
8882 configure it using the options in `keywords`, adds the constraints
8883 in `args`, and invokes check.
8886 >>> solve(a > 0, a < 2)
8889 show = keywords.pop(
"show",
False)
8897 print(
"no solution")
8899 print(
"failed to solve")
◆ solve_using()
| def z3py.solve_using |
( |
|
s, |
|
|
* |
args, |
|
|
** |
keywords |
|
) |
| |
Solve the constraints `*args` using solver `s`.
This is a simple function for creating demonstrations. It is similar to `solve`,
but it uses the given solver `s`.
It configures solver `s` using the options in `keywords`, adds the constraints
in `args`, and invokes check.
Definition at line 8908 of file z3py.py.
8909 """Solve the constraints `*args` using solver `s`.
8911 This is a simple function for creating demonstrations. It is similar to `solve`,
8912 but it uses the given solver `s`.
8913 It configures solver `s` using the options in `keywords`, adds the constraints
8914 in `args`, and invokes check.
8916 show = keywords.pop(
"show",
False)
8918 _z3_assert(isinstance(s, Solver),
"Solver object expected")
8926 print(
"no solution")
8928 print(
"failed to solve")
◆ SolverFor()
| def z3py.SolverFor |
( |
|
logic, |
|
|
|
ctx = None, |
|
|
|
logFile = None |
|
) |
| |
Create a solver customized for the given logic.
The parameter `logic` is a string. It should be contains
the name of a SMT-LIB logic.
See http://www.smtlib.org/ for the name of all available logics.
>>> s = SolverFor("QF_LIA")
>>> x = Int('x')
>>> s.add(x > 0)
>>> s.add(x < 2)
>>> s.check()
sat
>>> s.model()
[x = 1]
Definition at line 7272 of file z3py.py.
7272 def SolverFor(logic, ctx=None, logFile=None):
7273 """Create a solver customized for the given logic.
7275 The parameter `logic` is a string. It should be contains
7276 the name of a SMT-LIB logic.
7277 See http://www.smtlib.org/ for the name of all available logics.
7279 >>> s = SolverFor("QF_LIA")
◆ Sqrt()
| def z3py.Sqrt |
( |
|
a, |
|
|
|
ctx = None |
|
) |
| |
Return a Z3 expression which represents the square root of a.
>>> x = Real('x')
>>> Sqrt(x)
x**(1/2)
Definition at line 3373 of file z3py.py.
3373 def Sqrt(a, ctx=None):
3374 """ Return a Z3 expression which represents the square root of a.
◆ SRem()
Create the Z3 expression signed remainder.
Use the operator % for signed modulus, and URem() for unsigned remainder.
>>> x = BitVec('x', 32)
>>> y = BitVec('y', 32)
>>> SRem(x, y)
SRem(x, y)
>>> SRem(x, y).sort()
BitVec(32)
>>> (x % y).sexpr()
'(bvsmod x y)'
>>> SRem(x, y).sexpr()
'(bvsrem x y)'
Definition at line 4240 of file z3py.py.
4241 """Create the Z3 expression signed remainder.
4243 Use the operator % for signed modulus, and URem() for unsigned remainder.
4245 >>> x = BitVec('x', 32)
4246 >>> y = BitVec('y', 32)
4249 >>> SRem(x, y).sort()
4253 >>> SRem(x, y).sexpr()
4256 _check_bv_args(a, b)
4257 a, b = _coerce_exprs(a, b)
4258 return BitVecRef(
Z3_mk_bvsrem(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ Star()
Create the regular expression accepting zero or more repetitions of argument.
>>> re = Star(Re("a"))
>>> print(simplify(InRe("aa", re)))
True
>>> print(simplify(InRe("ab", re)))
False
>>> print(simplify(InRe("", re)))
True
Definition at line 11007 of file z3py.py.
11008 """Create the regular expression accepting zero or more repetitions of argument.
11009 >>> re = Star(Re("a"))
11010 >>> print(simplify(InRe("aa", re)))
11012 >>> print(simplify(InRe("ab", re)))
11014 >>> print(simplify(InRe("", re)))
11017 return ReRef(
Z3_mk_re_star(re.ctx_ref(), re.as_ast()), re.ctx)
◆ Store()
| def z3py.Store |
( |
|
a, |
|
|
|
i, |
|
|
|
v |
|
) |
| |
Return a Z3 store array expression.
>>> a = Array('a', IntSort(), IntSort())
>>> i, v = Ints('i v')
>>> s = Store(a, i, v)
>>> s.sort()
Array(Int, Int)
>>> prove(s[i] == v)
proved
>>> j = Int('j')
>>> prove(Implies(i != j, s[j] == a[j]))
proved
Definition at line 4725 of file z3py.py.
4726 """Return a Z3 store array expression.
4728 >>> a = Array('a', IntSort(), IntSort())
4729 >>> i, v = Ints('i v')
4730 >>> s = Store(a, i, v)
4733 >>> prove(s[i] == v)
4736 >>> prove(Implies(i != j, s[j] == a[j]))
◆ String()
| def z3py.String |
( |
|
name, |
|
|
|
ctx = None |
|
) |
| |
Return a string constant named `name`. If `ctx=None`, then the global context is used.
>>> x = String('x')
Definition at line 10693 of file z3py.py.
10693 def String(name, ctx=None):
10694 """Return a string constant named `name`. If `ctx=None`, then the global context is used.
10696 >>> x = String('x')
10698 ctx = _get_ctx(ctx)
Referenced by Strings().
◆ Strings()
| def z3py.Strings |
( |
|
names, |
|
|
|
ctx = None |
|
) |
| |
Return a tuple of String constants.
Definition at line 10702 of file z3py.py.
10702 def Strings(names, ctx=None):
10703 """Return a tuple of String constants. """
10704 ctx = _get_ctx(ctx)
10705 if isinstance(names, str):
10706 names = names.split(
" ")
10707 return [
String(name, ctx)
for name
in names]
◆ StringSort()
| def z3py.StringSort |
( |
|
ctx = None | ) |
|
Create a string sort
>>> s = StringSort()
>>> print(s)
String
Definition at line 10569 of file z3py.py.
10570 """Create a string sort
10571 >>> s = StringSort()
10575 ctx = _get_ctx(ctx)
Referenced by String().
◆ StringVal()
| def z3py.StringVal |
( |
|
s, |
|
|
|
ctx = None |
|
) |
| |
◆ StrToInt()
Convert string expression to integer
>>> a = StrToInt("1")
>>> simplify(1 == a)
True
>>> b = StrToInt("2")
>>> simplify(1 == b)
False
>>> c = StrToInt(IntToStr(2))
>>> simplify(1 == c)
False
Definition at line 10862 of file z3py.py.
10863 """Convert string expression to integer
10864 >>> a = StrToInt("1")
10865 >>> simplify(1 == a)
10867 >>> b = StrToInt("2")
10868 >>> simplify(1 == b)
10870 >>> c = StrToInt(IntToStr(2))
10871 >>> simplify(1 == c)
◆ SubSeq()
| def z3py.SubSeq |
( |
|
s, |
|
|
|
offset, |
|
|
|
length |
|
) |
| |
Extract substring or subsequence starting at offset
Definition at line 10715 of file z3py.py.
10715 def SubSeq(s, offset, length):
10716 """Extract substring or subsequence starting at offset"""
10717 return Extract(s, offset, length)
◆ substitute()
| def z3py.substitute |
( |
|
t, |
|
|
* |
m |
|
) |
| |
Apply substitution m on t, m is a list of pairs of the form (from, to).
Every occurrence in t of from is replaced with to.
>>> x = Int('x')
>>> y = Int('y')
>>> substitute(x + 1, (x, y + 1))
y + 1 + 1
>>> f = Function('f', IntSort(), IntSort())
>>> substitute(f(x) + f(y), (f(x), IntVal(1)), (f(y), IntVal(1)))
1 + 1
Definition at line 8680 of file z3py.py.
8681 """Apply substitution m on t, m is a list of pairs of the form (from, to).
8682 Every occurrence in t of from is replaced with to.
8686 >>> substitute(x + 1, (x, y + 1))
8688 >>> f = Function('f', IntSort(), IntSort())
8689 >>> substitute(f(x) + f(y), (f(x), IntVal(1)), (f(y), IntVal(1)))
8692 if isinstance(m, tuple):
8694 if isinstance(m1, list)
and all(isinstance(p, tuple)
for p
in m1):
8697 _z3_assert(
is_expr(t),
"Z3 expression expected")
8698 _z3_assert(all([isinstance(p, tuple)
and is_expr(p[0])
and is_expr(p[1])
and p[0].sort().
eq(
8699 p[1].sort())
for p
in m]),
"Z3 invalid substitution, expression pairs expected.")
8701 _from = (Ast * num)()
8703 for i
in range(num):
8704 _from[i] = m[i][0].as_ast()
8705 _to[i] = m[i][1].as_ast()
8706 return _to_expr_ref(
Z3_substitute(t.ctx.ref(), t.as_ast(), num, _from, _to), t.ctx)
◆ substitute_vars()
| def z3py.substitute_vars |
( |
|
t, |
|
|
* |
m |
|
) |
| |
Substitute the free variables in t with the expression in m.
>>> v0 = Var(0, IntSort())
>>> v1 = Var(1, IntSort())
>>> x = Int('x')
>>> f = Function('f', IntSort(), IntSort(), IntSort())
>>> # replace v0 with x+1 and v1 with x
>>> substitute_vars(f(v0, v1), x + 1, x)
f(x + 1, x)
Definition at line 8709 of file z3py.py.
8710 """Substitute the free variables in t with the expression in m.
8712 >>> v0 = Var(0, IntSort())
8713 >>> v1 = Var(1, IntSort())
8715 >>> f = Function('f', IntSort(), IntSort(), IntSort())
8716 >>> # replace v0 with x+1 and v1 with x
8717 >>> substitute_vars(f(v0, v1), x + 1, x)
8721 _z3_assert(
is_expr(t),
"Z3 expression expected")
8722 _z3_assert(all([
is_expr(n)
for n
in m]),
"Z3 invalid substitution, list of expressions expected.")
8725 for i
in range(num):
8726 _to[i] = m[i].as_ast()
◆ SubString()
| def z3py.SubString |
( |
|
s, |
|
|
|
offset, |
|
|
|
length |
|
) |
| |
Extract substring or subsequence starting at offset
Definition at line 10710 of file z3py.py.
10711 """Extract substring or subsequence starting at offset"""
10712 return Extract(s, offset, length)
◆ SuffixOf()
| def z3py.SuffixOf |
( |
|
a, |
|
|
|
b |
|
) |
| |
Check if 'a' is a suffix of 'b'
>>> s1 = SuffixOf("ab", "abc")
>>> simplify(s1)
False
>>> s2 = SuffixOf("bc", "abc")
>>> simplify(s2)
True
Definition at line 10774 of file z3py.py.
10775 """Check if 'a' is a suffix of 'b'
10776 >>> s1 = SuffixOf("ab", "abc")
10779 >>> s2 = SuffixOf("bc", "abc")
10783 ctx = _get_ctx2(a, b)
10784 a = _coerce_seq(a, ctx)
10785 b = _coerce_seq(b, ctx)
10786 return BoolRef(
Z3_mk_seq_suffix(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ Sum()
Create the sum of the Z3 expressions.
>>> a, b, c = Ints('a b c')
>>> Sum(a, b, c)
a + b + c
>>> Sum([a, b, c])
a + b + c
>>> A = IntVector('a', 5)
>>> Sum(A)
a__0 + a__1 + a__2 + a__3 + a__4
Definition at line 8730 of file z3py.py.
8731 """Create the sum of the Z3 expressions.
8733 >>> a, b, c = Ints('a b c')
8738 >>> A = IntVector('a', 5)
8740 a__0 + a__1 + a__2 + a__3 + a__4
8742 args = _get_args(args)
8745 ctx = _ctx_from_ast_arg_list(args)
8747 return _reduce(
lambda a, b: a + b, args, 0)
8748 args = _coerce_expr_list(args, ctx)
8750 return _reduce(
lambda a, b: a + b, args, 0)
8752 _args, sz = _to_ast_array(args)
8753 return ArithRef(
Z3_mk_add(ctx.ref(), sz, _args), ctx)
◆ tactic_description()
| def z3py.tactic_description |
( |
|
name, |
|
|
|
ctx = None |
|
) |
| |
Return a short description for the tactic named `name`.
>>> d = tactic_description('simplify')
Definition at line 8334 of file z3py.py.
8335 """Return a short description for the tactic named `name`.
8337 >>> d = tactic_description('simplify')
Referenced by describe_tactics().
◆ tactics()
| def z3py.tactics |
( |
|
ctx = None | ) |
|
Return a list of all available tactics in Z3.
>>> l = tactics()
>>> l.count('simplify') == 1
True
Definition at line 8323 of file z3py.py.
8324 """Return a list of all available tactics in Z3.
8327 >>> l.count('simplify') == 1
Referenced by describe_tactics(), and z3.par_or().
◆ Then()
| def z3py.Then |
( |
* |
ts, |
|
|
** |
ks |
|
) |
| |
Return a tactic that applies the tactics in `*ts` in sequence. Shorthand for AndThen(*ts, **ks).
>>> x, y = Ints('x y')
>>> t = Then(Tactic('simplify'), Tactic('solve-eqs'))
>>> t(And(x == 0, y > x + 1))
[[Not(y <= 1)]]
>>> t(And(x == 0, y > x + 1)).as_expr()
Not(y <= 1)
Definition at line 8191 of file z3py.py.
8191 def Then(*ts, **ks):
8192 """Return a tactic that applies the tactics in `*ts` in sequence. Shorthand for AndThen(*ts, **ks).
8194 >>> x, y = Ints('x y')
8195 >>> t = Then(Tactic('simplify'), Tactic('solve-eqs'))
8196 >>> t(And(x == 0, y > x + 1))
8198 >>> t(And(x == 0, y > x + 1)).as_expr()
◆ to_symbol()
| def z3py.to_symbol |
( |
|
s, |
|
|
|
ctx = None |
|
) |
| |
Convert an integer or string into a Z3 symbol.
Definition at line 129 of file z3py.py.
130 """Convert an integer or string into a Z3 symbol."""
Referenced by Fixedpoint.add_rule(), Optimize.add_soft(), Array(), BitVec(), Bool(), Const(), CreateDatatypes(), DeclareSort(), EnumSort(), FiniteDomainSort(), FP(), Function(), ParamDescrsRef.get_documentation(), ParamDescrsRef.get_kind(), Int(), is_quantifier(), prove(), Real(), RecFunction(), ParamsRef.set(), Fixedpoint.set_predicate_representation(), SolverFor(), String(), and Fixedpoint.update_rule().
◆ ToInt()
Return the Z3 expression ToInt(a).
>>> x = Real('x')
>>> x.sort()
Real
>>> n = ToInt(x)
>>> n
ToInt(x)
>>> n.sort()
Int
Definition at line 3338 of file z3py.py.
3339 """ Return the Z3 expression ToInt(a).
3351 _z3_assert(a.is_real(),
"Z3 real expression expected.")
◆ ToReal()
Return the Z3 expression ToReal(a).
>>> x = Int('x')
>>> x.sort()
Int
>>> n = ToReal(x)
>>> n
ToReal(x)
>>> n.sort()
Real
Definition at line 3320 of file z3py.py.
3321 """ Return the Z3 expression ToReal(a).
3333 _z3_assert(a.is_int(),
"Z3 integer expression expected.")
◆ TransitiveClosure()
| def z3py.TransitiveClosure |
( |
|
f | ) |
|
Given a binary relation R, such that the two arguments have the same sort
create the transitive closure relation R+.
The transitive closure R+ is a new relation.
Definition at line 11064 of file z3py.py.
11065 """Given a binary relation R, such that the two arguments have the same sort
11066 create the transitive closure relation R+.
11067 The transitive closure R+ is a new relation.
◆ TreeOrder()
| def z3py.TreeOrder |
( |
|
a, |
|
|
|
index |
|
) |
| |
◆ TryFor()
| def z3py.TryFor |
( |
|
t, |
|
|
|
ms, |
|
|
|
ctx = None |
|
) |
| |
Return a tactic that applies `t` to a given goal for `ms` milliseconds.
If `t` does not terminate in `ms` milliseconds, then it fails.
Definition at line 8314 of file z3py.py.
8314 def TryFor(t, ms, ctx=None):
8315 """Return a tactic that applies `t` to a given goal for `ms` milliseconds.
8317 If `t` does not terminate in `ms` milliseconds, then it fails.
8319 t = _to_tactic(t, ctx)
◆ TupleSort()
| def z3py.TupleSort |
( |
|
name, |
|
|
|
sorts, |
|
|
|
ctx = None |
|
) |
| |
Create a named tuple sort base on a set of underlying sorts
Example:
>>> pair, mk_pair, (first, second) = TupleSort("pair", [IntSort(), StringSort()])
Definition at line 5293 of file z3py.py.
5294 """Create a named tuple sort base on a set of underlying sorts
5296 >>> pair, mk_pair, (first, second) = TupleSort("pair", [IntSort(), StringSort()])
5298 tuple = Datatype(name, ctx)
5299 projects = [(
"project%d" % i, sorts[i])
for i
in range(len(sorts))]
5300 tuple.declare(name, *projects)
5301 tuple = tuple.create()
5302 return tuple, tuple.constructor(0), [tuple.accessor(0, i)
for i
in range(len(sorts))]
◆ UDiv()
Create the Z3 expression (unsigned) division `self / other`.
Use the operator / for signed division.
>>> x = BitVec('x', 32)
>>> y = BitVec('y', 32)
>>> UDiv(x, y)
UDiv(x, y)
>>> UDiv(x, y).sort()
BitVec(32)
>>> (x / y).sexpr()
'(bvsdiv x y)'
>>> UDiv(x, y).sexpr()
'(bvudiv x y)'
Definition at line 4198 of file z3py.py.
4199 """Create the Z3 expression (unsigned) division `self / other`.
4201 Use the operator / for signed division.
4203 >>> x = BitVec('x', 32)
4204 >>> y = BitVec('y', 32)
4207 >>> UDiv(x, y).sort()
4211 >>> UDiv(x, y).sexpr()
4214 _check_bv_args(a, b)
4215 a, b = _coerce_exprs(a, b)
4216 return BitVecRef(
Z3_mk_bvudiv(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ UGE()
Create the Z3 expression (unsigned) `other >= self`.
Use the operator >= for signed greater than or equal to.
>>> x, y = BitVecs('x y', 32)
>>> UGE(x, y)
UGE(x, y)
>>> (x >= y).sexpr()
'(bvsge x y)'
>>> UGE(x, y).sexpr()
'(bvuge x y)'
Definition at line 4162 of file z3py.py.
4163 """Create the Z3 expression (unsigned) `other >= self`.
4165 Use the operator >= for signed greater than or equal to.
4167 >>> x, y = BitVecs('x y', 32)
4170 >>> (x >= y).sexpr()
4172 >>> UGE(x, y).sexpr()
4175 _check_bv_args(a, b)
4176 a, b = _coerce_exprs(a, b)
4177 return BoolRef(
Z3_mk_bvuge(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ UGT()
Create the Z3 expression (unsigned) `other > self`.
Use the operator > for signed greater than.
>>> x, y = BitVecs('x y', 32)
>>> UGT(x, y)
UGT(x, y)
>>> (x > y).sexpr()
'(bvsgt x y)'
>>> UGT(x, y).sexpr()
'(bvugt x y)'
Definition at line 4180 of file z3py.py.
4181 """Create the Z3 expression (unsigned) `other > self`.
4183 Use the operator > for signed greater than.
4185 >>> x, y = BitVecs('x y', 32)
4190 >>> UGT(x, y).sexpr()
4193 _check_bv_args(a, b)
4194 a, b = _coerce_exprs(a, b)
4195 return BoolRef(
Z3_mk_bvugt(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ ULE()
Create the Z3 expression (unsigned) `other <= self`.
Use the operator <= for signed less than or equal to.
>>> x, y = BitVecs('x y', 32)
>>> ULE(x, y)
ULE(x, y)
>>> (x <= y).sexpr()
'(bvsle x y)'
>>> ULE(x, y).sexpr()
'(bvule x y)'
Definition at line 4126 of file z3py.py.
4127 """Create the Z3 expression (unsigned) `other <= self`.
4129 Use the operator <= for signed less than or equal to.
4131 >>> x, y = BitVecs('x y', 32)
4134 >>> (x <= y).sexpr()
4136 >>> ULE(x, y).sexpr()
4139 _check_bv_args(a, b)
4140 a, b = _coerce_exprs(a, b)
4141 return BoolRef(
Z3_mk_bvule(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ ULT()
Create the Z3 expression (unsigned) `other < self`.
Use the operator < for signed less than.
>>> x, y = BitVecs('x y', 32)
>>> ULT(x, y)
ULT(x, y)
>>> (x < y).sexpr()
'(bvslt x y)'
>>> ULT(x, y).sexpr()
'(bvult x y)'
Definition at line 4144 of file z3py.py.
4145 """Create the Z3 expression (unsigned) `other < self`.
4147 Use the operator < for signed less than.
4149 >>> x, y = BitVecs('x y', 32)
4154 >>> ULT(x, y).sexpr()
4157 _check_bv_args(a, b)
4158 a, b = _coerce_exprs(a, b)
4159 return BoolRef(
Z3_mk_bvult(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ Union()
Create union of regular expressions.
>>> re = Union(Re("a"), Re("b"), Re("c"))
>>> print (simplify(InRe("d", re)))
False
Definition at line 10938 of file z3py.py.
10939 """Create union of regular expressions.
10940 >>> re = Union(Re("a"), Re("b"), Re("c"))
10941 >>> print (simplify(InRe("d", re)))
10944 args = _get_args(args)
10947 _z3_assert(sz > 0,
"At least one argument expected.")
10948 _z3_assert(all([
is_re(a)
for a
in args]),
"All arguments must be regular expressions.")
10953 for i
in range(sz):
10954 v[i] = args[i].as_ast()
Referenced by ReRef.__add__().
◆ Unit()
Create a singleton sequence
Definition at line 10754 of file z3py.py.
10755 """Create a singleton sequence"""
◆ Update()
| def z3py.Update |
( |
|
a, |
|
|
|
i, |
|
|
|
v |
|
) |
| |
Return a Z3 store array expression.
>>> a = Array('a', IntSort(), IntSort())
>>> i, v = Ints('i v')
>>> s = Update(a, i, v)
>>> s.sort()
Array(Int, Int)
>>> prove(s[i] == v)
proved
>>> j = Int('j')
>>> prove(Implies(i != j, s[j] == a[j]))
proved
Definition at line 4692 of file z3py.py.
4693 """Return a Z3 store array expression.
4695 >>> a = Array('a', IntSort(), IntSort())
4696 >>> i, v = Ints('i v')
4697 >>> s = Update(a, i, v)
4700 >>> prove(s[i] == v)
4703 >>> prove(Implies(i != j, s[j] == a[j]))
4707 _z3_assert(
is_array_sort(a),
"First argument must be a Z3 array expression")
4708 i = a.sort().domain().cast(i)
4709 v = a.sort().
range().cast(v)
4711 return _to_expr_ref(
Z3_mk_store(ctx.ref(), a.as_ast(), i.as_ast(), v.as_ast()), ctx)
Referenced by Store().
◆ URem()
Create the Z3 expression (unsigned) remainder `self % other`.
Use the operator % for signed modulus, and SRem() for signed remainder.
>>> x = BitVec('x', 32)
>>> y = BitVec('y', 32)
>>> URem(x, y)
URem(x, y)
>>> URem(x, y).sort()
BitVec(32)
>>> (x % y).sexpr()
'(bvsmod x y)'
>>> URem(x, y).sexpr()
'(bvurem x y)'
Definition at line 4219 of file z3py.py.
4220 """Create the Z3 expression (unsigned) remainder `self % other`.
4222 Use the operator % for signed modulus, and SRem() for signed remainder.
4224 >>> x = BitVec('x', 32)
4225 >>> y = BitVec('y', 32)
4228 >>> URem(x, y).sort()
4232 >>> URem(x, y).sexpr()
4235 _check_bv_args(a, b)
4236 a, b = _coerce_exprs(a, b)
4237 return BitVecRef(
Z3_mk_bvurem(a.ctx_ref(), a.as_ast(), b.as_ast()), a.ctx)
◆ user_prop_diseq()
| def z3py.user_prop_diseq |
( |
|
ctx, |
|
|
|
cb, |
|
|
|
x, |
|
|
|
y |
|
) |
| |
Definition at line 11152 of file z3py.py.
11153 prop = _prop_closures.get(ctx)
◆ user_prop_eq()
| def z3py.user_prop_eq |
( |
|
ctx, |
|
|
|
cb, |
|
|
|
x, |
|
|
|
y |
|
) |
| |
Definition at line 11145 of file z3py.py.
11146 prop = _prop_closures.get(ctx)
◆ user_prop_final()
| def z3py.user_prop_final |
( |
|
ctx, |
|
|
|
cb |
|
) |
| |
Definition at line 11138 of file z3py.py.
11139 prop = _prop_closures.get(ctx)
◆ user_prop_fixed()
| def z3py.user_prop_fixed |
( |
|
ctx, |
|
|
|
cb, |
|
|
|
id, |
|
|
|
value |
|
) |
| |
Definition at line 11131 of file z3py.py.
11132 prop = _prop_closures.get(ctx)
11134 prop.fixed(id, _to_expr_ref(ctypes.c_void_p(value), prop.ctx()))
◆ user_prop_fresh()
| def z3py.user_prop_fresh |
( |
|
id, |
|
|
|
ctx |
|
) |
| |
Definition at line 11124 of file z3py.py.
11125 _prop_closures.set_threaded()
11126 new_prop = UsePropagateBase(
None, ctx)
11127 _prop_closures.set(new_prop.id, new_prop.fresh())
11128 return ctypes.c_void_p(new_prop.id)
◆ user_prop_pop()
| def z3py.user_prop_pop |
( |
|
ctx, |
|
|
|
num_scopes |
|
) |
| |
Definition at line 11120 of file z3py.py.
11121 _prop_closures.get(ctx).
pop(num_scopes)
◆ user_prop_push()
| def z3py.user_prop_push |
( |
|
ctx | ) |
|
◆ Var()
Create a Z3 free variable. Free variables are used to create quantified formulas.
>>> Var(0, IntSort())
Var(0)
>>> eq(Var(0, IntSort()), Var(0, BoolSort()))
False
Definition at line 1438 of file z3py.py.
1439 """Create a Z3 free variable. Free variables are used to create quantified formulas.
1441 >>> Var(0, IntSort())
1443 >>> eq(Var(0, IntSort()), Var(0, BoolSort()))
1447 _z3_assert(
is_sort(s),
"Z3 sort expected")
1448 return _to_expr_ref(
Z3_mk_bound(s.ctx_ref(), idx, s.ast), s.ctx)
Referenced by RealVar().
◆ When()
| def z3py.When |
( |
|
p, |
|
|
|
t, |
|
|
|
ctx = None |
|
) |
| |
Return a tactic that applies tactic `t` only if probe `p` evaluates to true.
Otherwise, it returns the input goal unmodified.
>>> t = When(Probe('size') > 2, Tactic('simplify'))
>>> x, y = Ints('x y')
>>> g = Goal()
>>> g.add(x > 0)
>>> g.add(y > 0)
>>> t(g)
[[x > 0, y > 0]]
>>> g.add(x == y + 1)
>>> t(g)
[[Not(x <= 0), Not(y <= 0), x == 1 + y]]
Definition at line 8608 of file z3py.py.
8608 def When(p, t, ctx=None):
8609 """Return a tactic that applies tactic `t` only if probe `p` evaluates to true.
8610 Otherwise, it returns the input goal unmodified.
8612 >>> t = When(Probe('size') > 2, Tactic('simplify'))
8613 >>> x, y = Ints('x y')
8619 >>> g.add(x == y + 1)
8621 [[Not(x <= 0), Not(y <= 0), x == 1 + y]]
8623 p = _to_probe(p, ctx)
8624 t = _to_tactic(t, ctx)
8625 return Tactic(
Z3_tactic_when(t.ctx.ref(), p.probe, t.tactic), t.ctx)
◆ With()
| def z3py.With |
( |
|
t, |
|
|
* |
args, |
|
|
** |
keys |
|
) |
| |
Return a tactic that applies tactic `t` using the given configuration options.
>>> x, y = Ints('x y')
>>> t = With(Tactic('simplify'), som=True)
>>> t((x + 1)*(y + 2) == 0)
[[2*x + y + x*y == -2]]
Definition at line 8265 of file z3py.py.
8265 def With(t, *args, **keys):
8266 """Return a tactic that applies tactic `t` using the given configuration options.
8268 >>> x, y = Ints('x y')
8269 >>> t = With(Tactic('simplify'), som=True)
8270 >>> t((x + 1)*(y + 2) == 0)
8271 [[2*x + y + x*y == -2]]
8273 ctx = keys.pop(
"ctx",
None)
8274 t = _to_tactic(t, ctx)
◆ WithParams()
| def z3py.WithParams |
( |
|
t, |
|
|
|
p |
|
) |
| |
Return a tactic that applies tactic `t` using the given configuration options.
>>> x, y = Ints('x y')
>>> p = ParamsRef()
>>> p.set("som", True)
>>> t = WithParams(Tactic('simplify'), p)
>>> t((x + 1)*(y + 2) == 0)
[[2*x + y + x*y == -2]]
Definition at line 8279 of file z3py.py.
8280 """Return a tactic that applies tactic `t` using the given configuration options.
8282 >>> x, y = Ints('x y')
8284 >>> p.set("som", True)
8285 >>> t = WithParams(Tactic('simplify'), p)
8286 >>> t((x + 1)*(y + 2) == 0)
8287 [[2*x + y + x*y == -2]]
8289 t = _to_tactic(t,
None)
◆ Xor()
| def z3py.Xor |
( |
|
a, |
|
|
|
b, |
|
|
|
ctx = None |
|
) |
| |
Create a Z3 Xor expression.
>>> p, q = Bools('p q')
>>> Xor(p, q)
Xor(p, q)
>>> simplify(Xor(p, q))
Not(p) == q
Definition at line 1763 of file z3py.py.
1763 def Xor(a, b, ctx=None):
1764 """Create a Z3 Xor expression.
1766 >>> p, q = Bools('p q')
1769 >>> simplify(Xor(p, q))
1772 ctx = _get_ctx(_ctx_from_ast_arg_list([a, b], ctx))
1776 return BoolRef(
Z3_mk_xor(ctx.ref(), a.as_ast(), b.as_ast()), ctx)
◆ z3_debug()
Definition at line 64 of file z3py.py.
Referenced by FuncDeclRef.__call__(), Probe.__call__(), QuantifierRef.__getitem__(), ModelRef.__getitem__(), Context.__init__(), Goal.__init__(), ArithRef.__mod__(), ArithRef.__rmod__(), DatatypeSortRef.accessor(), And(), AndThen(), Tactic.apply(), ExprRef.arg(), args2params(), ArraySort(), IntNumRef.as_long(), AtLeast(), AtMost(), BV2Int(), BVRedAnd(), BVRedOr(), BVSNegNoOverflow(), SortRef.cast(), BoolSortRef.cast(), ArithSortRef.cast(), BitVecSortRef.cast(), FPSortRef.cast(), ExprRef.children(), Concat(), Const(), DatatypeSortRef.constructor(), Goal.convert_model(), CreateDatatypes(), ExprRef.decl(), Datatype.declare(), Datatype.declare_core(), Default(), describe_probes(), Distinct(), FuncDeclRef.domain(), EnumSort(), eq(), AstRef.eq(), Ext(), Extract(), FiniteDomainVal(), fpIsPositive(), fpNeg(), FPSort(), fpToFPUnsigned(), fpToIEEEBV(), fpToReal(), fpToSBV(), fpToUBV(), FreshFunction(), Function(), get_as_array_func(), ModelRef.get_interp(), get_map_func(), ModelRef.get_universe(), get_var_index(), If(), AlgebraicNumRef.index(), Intersect(), is_quantifier(), is_sort(), IsInt(), K(), Map(), MultiPattern(), QuantifierRef.no_pattern(), ExprRef.num_args(), Or(), OrElse(), Tactic.param_descrs(), ParOr(), ParThen(), QuantifierRef.pattern(), prove(), RatVal(), RealSort(), RecFunction(), DatatypeSortRef.recognizer(), RepeatBitVec(), Select(), ParamsRef.set(), set_param(), SignExt(), simplify(), solve_using(), substitute(), substitute_vars(), ToInt(), ToReal(), AstRef.translate(), Goal.translate(), ModelRef.translate(), Solver.translate(), Union(), Update(), Var(), QuantifierRef.var_name(), QuantifierRef.var_sort(), and ZeroExt().
◆ z3_error_handler()
| def z3py.z3_error_handler |
( |
|
c, |
|
|
|
e |
|
) |
| |
◆ ZeroExt()
| def z3py.ZeroExt |
( |
|
n, |
|
|
|
a |
|
) |
| |
Return a bit-vector expression with `n` extra zero-bits.
>>> x = BitVec('x', 16)
>>> n = ZeroExt(8, x)
>>> n.size()
24
>>> n
ZeroExt(8, x)
>>> n.sort()
BitVec(24)
>>> v0 = BitVecVal(2, 2)
>>> v0
2
>>> v0.size()
2
>>> v = simplify(ZeroExt(6, v0))
>>> v
2
>>> v.size()
8
Definition at line 4355 of file z3py.py.
4356 """Return a bit-vector expression with `n` extra zero-bits.
4358 >>> x = BitVec('x', 16)
4359 >>> n = ZeroExt(8, x)
4366 >>> v0 = BitVecVal(2, 2)
4371 >>> v = simplify(ZeroExt(6, v0))
4378 _z3_assert(_is_int(n),
"First argument must be an integer")
4379 _z3_assert(
is_bv(a),
"Second argument must be a Z3 bit-vector expression")
4380 return BitVecRef(
Z3_mk_zero_ext(a.ctx_ref(), n, a.as_ast()), a.ctx)
◆ sat
◆ unknown
◆ unsat
◆ Z3_DEBUG
Z3_ast Z3_API Z3_mk_re_plus(Z3_context c, Z3_ast re)
Create the regular language re+.
def Reals(names, ctx=None)
void Z3_API Z3_global_param_reset_all(void)
Restore the value of all global (and module) parameters. This command will not affect already created...
def fpInfinity(s, negative)
def fpRoundToIntegral(rm, a, ctx=None)
Z3_symbol Z3_API Z3_mk_string_symbol(Z3_context c, Z3_string s)
Create a Z3 symbol using a C string.
Z3_ast Z3_API Z3_mk_re_option(Z3_context c, Z3_ast re)
Create the regular language [re].
Z3_func_decl Z3_API Z3_to_func_decl(Z3_context c, Z3_ast a)
Convert an AST into a FUNC_DECL_AST. This is just type casting.
Z3_tactic Z3_API Z3_tactic_par_and_then(Z3_context c, Z3_tactic t1, Z3_tactic t2)
Return a tactic that applies t1 to a given goal and then t2 to every subgoal produced by t1....
def RoundTowardPositive(ctx=None)
Z3_ast Z3_API Z3_mk_fpa_to_fp_bv(Z3_context c, Z3_ast bv, Z3_sort s)
Conversion of a single IEEE 754-2008 bit-vector into a floating-point number.
Z3_ast Z3_API Z3_mk_int_to_str(Z3_context c, Z3_ast s)
Integer to string conversion.
Z3_ast Z3_API Z3_mk_re_complement(Z3_context c, Z3_ast re)
Create the complement of the regular language re.
Z3_string Z3_API Z3_get_probe_name(Z3_context c, unsigned i)
Return the name of the i probe.
void Z3_API Z3_get_version(unsigned *major, unsigned *minor, unsigned *build_number, unsigned *revision_number)
Return Z3 version number information.
Z3_ast Z3_API Z3_mk_ext_rotate_left(Z3_context c, Z3_ast t1, Z3_ast t2)
Rotate bits of t1 to the left t2 times.
def TupleSort(name, sorts, ctx=None)
Z3_ast Z3_API Z3_mk_true(Z3_context c)
Create an AST node representing true.
def fpBVToFP(v, sort, ctx=None)
Z3_ast_vector Z3_API Z3_parse_smtlib2_file(Z3_context c, Z3_string file_name, unsigned num_sorts, Z3_symbol const sort_names[], Z3_sort const sorts[], unsigned num_decls, Z3_symbol const decl_names[], Z3_func_decl const decls[])
Similar to Z3_parse_smtlib2_string, but reads the benchmark from a file.
Z3_ast Z3_API Z3_mk_bvmul_no_underflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed multiplication of t1 and t2 does not underflo...
def FPs(names, fpsort, ctx=None)
Z3_ast Z3_API Z3_mk_bvmul_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2, bool is_signed)
Create a predicate that checks that the bit-wise multiplication of t1 and t2 does not overflow.
Z3_ast Z3_API Z3_mk_fresh_const(Z3_context c, Z3_string prefix, Z3_sort ty)
Declare and create a fresh constant.
Z3_ast Z3_API Z3_mk_zero_ext(Z3_context c, unsigned i, Z3_ast t1)
Extend the given bit-vector with zeros to the (unsigned) equivalent bit-vector of size m+i,...
Z3_func_decl Z3_API Z3_get_as_array_func_decl(Z3_context c, Z3_ast a)
Return the function declaration f associated with a (_ as_array f) node.
def DisjointSum(name, sorts, ctx=None)
def user_prop_fixed(ctx, cb, id, value)
Z3_ast Z3_API Z3_mk_seq_concat(Z3_context c, unsigned n, Z3_ast const args[])
Concatenate sequences.
Z3_tactic Z3_API Z3_tactic_fail_if(Z3_context c, Z3_probe p)
Return a tactic that fails if the probe p evaluates to false.
Z3_ast Z3_API Z3_mk_fpa_to_ubv(Z3_context c, Z3_ast rm, Z3_ast t, unsigned sz)
Conversion of a floating-point term into an unsigned bit-vector.
def FPVal(sig, exp=None, fps=None, ctx=None)
Z3_sort Z3_API Z3_mk_fpa_sort_64(Z3_context c)
Create the double-precision (64-bit) FloatingPoint sort.
def RealVarVector(n, ctx=None)
def fpToUBV(rm, x, s, ctx=None)
Z3_tactic Z3_API Z3_tactic_try_for(Z3_context c, Z3_tactic t, unsigned ms)
Return a tactic that applies t to a given goal for ms milliseconds. If t does not terminate in ms mil...
Z3_ast Z3_API Z3_get_decl_ast_parameter(Z3_context c, Z3_func_decl d, unsigned idx)
Return the expression value associated with an expression parameter.
def user_prop_fresh(id, ctx)
void Z3_API Z3_append_log(Z3_string string)
Append user-defined string to interaction log.
Z3_ast Z3_API Z3_mk_fpa_zero(Z3_context c, Z3_sort s, bool negative)
Create a floating-point zero of sort s.
def FreshInt(prefix="x", ctx=None)
Z3_ast Z3_API Z3_mk_fpa_round_toward_positive(Z3_context c)
Create a numeral of RoundingMode sort which represents the TowardPositive rounding mode.
expr range(expr const &lo, expr const &hi)
def BVSubNoOverflow(a, b)
Z3_ast Z3_API Z3_mk_re_full(Z3_context c, Z3_sort re)
Create an universal regular expression of sort re.
def parse_smt2_string(s, sorts={}, decls={}, ctx=None)
Z3_ast Z3_API Z3_mk_bv2int(Z3_context c, Z3_ast t1, bool is_signed)
Create an integer from the bit-vector argument t1. If is_signed is false, then the bit-vector t1 is t...
def RoundTowardNegative(ctx=None)
Z3_ast Z3_API Z3_mk_and(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] and ... and args[num_args-1].
def set_param(*args, **kws)
def RatVal(a, b, ctx=None)
def IntVal(val, ctx=None)
void Z3_API Z3_add_rec_def(Z3_context c, Z3_func_decl f, unsigned n, Z3_ast args[], Z3_ast body)
Define the body of a recursive function.
def fpToFP(a1, a2=None, a3=None, ctx=None)
Z3_ast Z3_API Z3_mk_set_has_size(Z3_context c, Z3_ast set, Z3_ast k)
Create predicate that holds if Boolean array set has k elements set to true.
def fpUnsignedToFP(rm, v, sort, ctx=None)
Z3_ast Z3_API Z3_mk_set_del(Z3_context c, Z3_ast set, Z3_ast elem)
Remove an element to a set.
Z3_ast Z3_API Z3_mk_fpa_round_nearest_ties_to_even(Z3_context c)
Create a numeral of RoundingMode sort which represents the NearestTiesToEven rounding mode.
Z3_ast Z3_API Z3_mk_seq_suffix(Z3_context c, Z3_ast suffix, Z3_ast s)
Check if suffix is a suffix of s.
def BoolVector(prefix, sz, ctx=None)
Z3_ast Z3_API Z3_mk_xor(Z3_context c, Z3_ast t1, Z3_ast t2)
Create an AST node representing t1 xor t2.
Z3_ast Z3_API Z3_mk_bvneg_no_overflow(Z3_context c, Z3_ast t1)
Check that bit-wise negation does not overflow when t1 is interpreted as a signed bit-vector.
def SubSeq(s, offset, length)
Z3_ast Z3_API Z3_mk_fpa_fp(Z3_context c, Z3_ast sgn, Z3_ast exp, Z3_ast sig)
Create an expression of FloatingPoint sort from three bit-vector expressions.
def ensure_prop_closures()
def SimpleSolver(ctx=None, logFile=None)
def With(t, *args, **keys)
Z3_ast Z3_API Z3_mk_full_set(Z3_context c, Z3_sort domain)
Create the full set.
def simplify(a, *arguments, **keywords)
Utils.
Z3_solver Z3_API Z3_mk_solver_for_logic(Z3_context c, Z3_symbol logic)
Create a new solver customized for the given logic. It behaves like Z3_mk_solver if the logic is unkn...
Z3_string Z3_API Z3_simplify_get_help(Z3_context c)
Return a string describing all available parameters.
Z3_ast Z3_API Z3_mk_or(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] or ... or args[num_args-1].
Z3_sort Z3_API Z3_mk_finite_domain_sort(Z3_context c, Z3_symbol name, uint64_t size)
Create a named finite domain sort.
Z3_ast Z3_API Z3_mk_set_union(Z3_context c, unsigned num_args, Z3_ast const args[])
Take the union of a list of sets.
def pop(self, num_scopes)
Z3_ast Z3_API Z3_mk_set_intersect(Z3_context c, unsigned num_args, Z3_ast const args[])
Take the intersection of a list of sets.
def Exists(vs, body, weight=1, qid="", skid="", patterns=[], no_patterns=[])
def to_symbol(s, ctx=None)
def fpMul(rm, a, b, ctx=None)
Z3_ast Z3_API Z3_mk_distinct(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing distinct(args[0], ..., args[num_args-1]).
Z3_ast Z3_API Z3_simplify_ex(Z3_context c, Z3_ast a, Z3_params p)
Interface to simplifier.
def fpGEQ(a, b, ctx=None)
Z3_func_decl Z3_API Z3_mk_rec_func_decl(Z3_context c, Z3_symbol s, unsigned domain_size, Z3_sort const domain[], Z3_sort range)
Declare a recursive function.
Z3_ast Z3_API Z3_mk_empty_set(Z3_context c, Z3_sort domain)
Create the empty set.
def fpRem(a, b, ctx=None)
def FiniteDomainSort(name, sz, ctx=None)
Z3_model Z3_API Z3_mk_model(Z3_context c)
Create a fresh model object. It has reference count 0.
Z3_ast Z3_API Z3_mk_re_loop(Z3_context c, Z3_ast r, unsigned lo, unsigned hi)
Create a regular expression loop. The supplied regular expression r is repeated between lo and hi tim...
def IndexOf(s, substr, offset=None)
Z3_func_decl Z3_API Z3_mk_linear_order(Z3_context c, Z3_sort a, unsigned id)
create a linear ordering relation over signature a. The relation is identified by the index id.
bool Z3_API Z3_is_as_array(Z3_context c, Z3_ast a)
The (_ as-array f) AST node is a construct for assigning interpretations for arrays in Z3....
Z3_ast Z3_API Z3_mk_fpa_to_sbv(Z3_context c, Z3_ast rm, Z3_ast t, unsigned sz)
Conversion of a floating-point term into a signed bit-vector.
Z3_ast Z3_API Z3_mk_add(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] + ... + args[num_args-1].
def z3_error_handler(c, e)
def BitVecVal(val, bv, ctx=None)
Z3_ast Z3_API Z3_mk_bvugt(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned greater than.
Z3_ast Z3_API Z3_mk_seq_prefix(Z3_context c, Z3_ast prefix, Z3_ast s)
Check if prefix is a prefix of s.
def Range(lo, hi, ctx=None)
Z3_pattern Z3_API Z3_mk_pattern(Z3_context c, unsigned num_patterns, Z3_ast const terms[])
Create a pattern for quantifier instantiation.
Z3_ast Z3_API Z3_mk_fpa_to_fp_signed(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a 2's complement signed bit-vector term into a term of FloatingPoint sort.
def Cond(p, t1, t2, ctx=None)
def is_finite_domain_sort(s)
Z3_ast Z3_API Z3_mk_concat(Z3_context c, Z3_ast t1, Z3_ast t2)
Concatenate the given bit-vectors.
Z3_ast Z3_API Z3_mk_implies(Z3_context c, Z3_ast t1, Z3_ast t2)
Create an AST node representing t1 implies t2.
def fpMax(a, b, ctx=None)
def RealVal(val, ctx=None)
def solve(*args, **keywords)
def RoundNearestTiesToEven(ctx=None)
Z3_ast Z3_API Z3_mk_seq_unit(Z3_context c, Z3_ast a)
Create a unit sequence of a.
Z3_sort_kind Z3_API Z3_get_sort_kind(Z3_context c, Z3_sort t)
Return the sort kind (e.g., array, tuple, int, bool, etc).
Z3_ast Z3_API Z3_mk_pbeq(Z3_context c, unsigned num_args, Z3_ast const args[], int const coeffs[], int k)
Pseudo-Boolean relations.
Z3_ast Z3_API Z3_mk_numeral(Z3_context c, Z3_string numeral, Z3_sort ty)
Create a numeral of a given sort.
def ForAll(vs, body, weight=1, qid="", skid="", patterns=[], no_patterns=[])
Z3_ast Z3_API Z3_mk_bvadd_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2, bool is_signed)
Create a predicate that checks that the bit-wise addition of t1 and t2 does not overflow.
def fpToFPUnsigned(rm, x, s, ctx=None)
Z3_ast Z3_API Z3_mk_real2int(Z3_context c, Z3_ast t1)
Coerce a real to an integer.
def FloatQuadruple(ctx=None)
Z3_ast Z3_API Z3_mk_bvredor(Z3_context c, Z3_ast t1)
Take disjunction of bits in vector, return vector of length 1.
def If(a, b, c, ctx=None)
Z3_sort Z3_API Z3_mk_fpa_sort(Z3_context c, unsigned ebits, unsigned sbits)
Create a FloatingPoint sort.
Z3_ast Z3_API Z3_mk_fpa_to_fp_unsigned(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a 2's complement unsigned bit-vector term into a term of FloatingPoint sort.
def set_default_rounding_mode(rm, ctx=None)
Z3_ast Z3_API Z3_mk_fpa_to_fp_real(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a term of real sort into a term of FloatingPoint sort.
Z3_ast Z3_API Z3_mk_seq_length(Z3_context c, Z3_ast s)
Return the length of the sequence s.
Z3_ast Z3_API Z3_mk_re_star(Z3_context c, Z3_ast re)
Create the regular language re*.
Z3_sort Z3_API Z3_mk_fpa_sort_quadruple(Z3_context c)
Create the quadruple-precision (128-bit) FloatingPoint sort.
Z3_ast Z3_API Z3_mk_array_ext(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create array extensionality index given two arrays with the same sort. The meaning is given by the ax...
Z3_ast Z3_API Z3_mk_map(Z3_context c, Z3_func_decl f, unsigned n, Z3_ast const *args)
Map f on the argument arrays.
def fpFMA(rm, a, b, c, ctx=None)
Z3_param_descrs Z3_API Z3_simplify_get_param_descrs(Z3_context c)
Return the parameter description set for the simplify procedure.
Z3_ast Z3_API Z3_mk_fpa_to_real(Z3_context c, Z3_ast t)
Conversion of a floating-point term into a real-numbered term.
def simplify_param_descrs()
def user_prop_eq(ctx, cb, x, y)
def fpSignedToFP(rm, v, sort, ctx=None)
def get_default_rounding_mode(ctx=None)
Z3_ast Z3_API Z3_mk_set_complement(Z3_context c, Z3_ast arg)
Take the complement of a set.
def PbEq(args, k, ctx=None)
Z3_ast Z3_API Z3_mk_fpa_neg(Z3_context c, Z3_ast t)
Floating-point negation.
def user_prop_diseq(ctx, cb, x, y)
Z3_tactic Z3_API Z3_tactic_using_params(Z3_context c, Z3_tactic t, Z3_params p)
Return a tactic that applies t using the given set of parameters.
Z3_ast Z3_API Z3_mk_seq_last_index(Z3_context c, Z3_ast, Z3_ast substr)
Return the last occurrence of substr in s. If s does not contain substr, then the value is -1,...
def BVAddNoOverflow(a, b, signed)
Z3_constructor Z3_API Z3_mk_constructor(Z3_context c, Z3_symbol name, Z3_symbol recognizer, unsigned num_fields, Z3_symbol const field_names[], Z3_sort_opt const sorts[], unsigned sort_refs[])
Create a constructor.
Z3_sort Z3_API Z3_mk_fpa_sort_128(Z3_context c)
Create the quadruple-precision (128-bit) FloatingPoint sort.
Z3_ast Z3_API Z3_mk_fpa_to_ieee_bv(Z3_context c, Z3_ast t)
Conversion of a floating-point term into a bit-vector term in IEEE 754-2008 format.
def Ints(names, ctx=None)
def Extract(high, low, a)
Z3_ast Z3_API Z3_mk_str_to_int(Z3_context c, Z3_ast s)
Convert string to integer.
def Array(name, dom, rng)
Z3_string Z3_API Z3_get_tactic_name(Z3_context c, unsigned i)
Return the name of the idx tactic.
Z3_ast Z3_API Z3_mk_repeat(Z3_context c, unsigned i, Z3_ast t1)
Repeat the given bit-vector up length i.
def ParAndThen(t1, t2, ctx=None)
def BVAddNoUnderflow(a, b)
def FloatDouble(ctx=None)
Z3_func_decl Z3_API Z3_mk_func_decl(Z3_context c, Z3_symbol s, unsigned domain_size, Z3_sort const domain[], Z3_sort range)
Declare a constant or function.
def Bools(names, ctx=None)
def RoundNearestTiesToAway(ctx=None)
Z3_ast Z3_API Z3_mk_re_range(Z3_context c, Z3_ast lo, Z3_ast hi)
Create the range regular expression over two sequences of length 1.
def parse_smt2_file(f, sorts={}, decls={}, ctx=None)
def substitute_vars(t, *m)
Z3_func_decl Z3_API Z3_mk_fresh_func_decl(Z3_context c, Z3_string prefix, unsigned domain_size, Z3_sort const domain[], Z3_sort range)
Declare a fresh constant or function.
Z3_ast Z3_API Z3_mk_ite(Z3_context c, Z3_ast t1, Z3_ast t2, Z3_ast t3)
Create an AST node representing an if-then-else: ite(t1, t2, t3).
Z3_ast Z3_API Z3_mk_extract(Z3_context c, unsigned high, unsigned low, Z3_ast t1)
Extract the bits high down to low from a bit-vector of size m to yield a new bit-vector of size n,...
def Implies(a, b, ctx=None)
Z3_ast Z3_API Z3_mk_seq_in_re(Z3_context c, Z3_ast seq, Z3_ast re)
Check if seq is in the language generated by the regular expression re.
Z3_ast Z3_API Z3_mk_set_difference(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Take the set difference between two sets.
Z3_ast Z3_API Z3_mk_bvule(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned less than or equal to.
def BVSDivNoOverflow(a, b)
def BitVec(name, bv, ctx=None)
Z3_sort Z3_API Z3_mk_bool_sort(Z3_context c)
Create the Boolean type.
unsigned Z3_API Z3_get_num_tactics(Z3_context c)
Return the number of builtin tactics available in Z3.
def BitVecs(names, bv, ctx=None)
Z3_tactic Z3_API Z3_tactic_cond(Z3_context c, Z3_probe p, Z3_tactic t1, Z3_tactic t2)
Return a tactic that applies t1 to a given goal if the probe p evaluates to true, and t2 if p evaluat...
def LastIndexOf(s, substr)
Z3_ast Z3_API Z3_mk_lstring(Z3_context c, unsigned len, Z3_string s)
Create a string constant out of the string that is passed in It takes the length of the string as wel...
Z3_bool Z3_API Z3_global_param_get(Z3_string param_id, Z3_string_ptr param_value)
Get a global (or module) parameter.
def fpIsNormal(a, ctx=None)
Z3_tactic Z3_API Z3_tactic_repeat(Z3_context c, Z3_tactic t, unsigned max)
Return a tactic that keeps applying t until the goal is not modified anymore or the maximum number of...
Z3_ast Z3_API Z3_mk_ext_rotate_right(Z3_context c, Z3_ast t1, Z3_ast t2)
Rotate bits of t1 to the right t2 times.
Z3_sort Z3_API Z3_mk_fpa_sort_32(Z3_context c)
Create the single-precision (32-bit) FloatingPoint sort.
Z3_ast Z3_API Z3_mk_const(Z3_context c, Z3_symbol s, Z3_sort ty)
Declare and create a constant.
void Z3_API Z3_disable_trace(Z3_string tag)
Disable tracing messages tagged as tag when Z3 is compiled in debug mode. It is a NOOP otherwise.
def probe_description(name, ctx=None)
def Strings(names, ctx=None)
def tactic_description(name, ctx=None)
Z3_sort Z3_API Z3_mk_bv_sort(Z3_context c, unsigned sz)
Create a bit-vector type of the given size.
def StringVal(s, ctx=None)
unsigned Z3_API Z3_get_index_value(Z3_context c, Z3_ast a)
Return index of de-Bruijn bound variable.
Z3_ast Z3_API Z3_mk_seq_to_re(Z3_context c, Z3_ast seq)
Create a regular expression that accepts the sequence seq.
def fpFP(sgn, exp, sig, ctx=None)
Z3_sort Z3_API Z3_mk_int_sort(Z3_context c)
Create the integer type.
Z3_string Z3_API Z3_probe_get_descr(Z3_context c, Z3_string name)
Return a string containing a description of the probe with the given name.
Z3_sort Z3_API Z3_mk_enumeration_sort(Z3_context c, Z3_symbol name, unsigned n, Z3_symbol const enum_names[], Z3_func_decl enum_consts[], Z3_func_decl enum_testers[])
Create a enumeration sort.
def FPSort(ebits, sbits, ctx=None)
Z3_string Z3_API Z3_get_full_version(void)
Return a string that fully describes the version of Z3 in use.
Z3_ast Z3_API Z3_mk_bvurem(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned remainder.
def DeclareSort(name, ctx=None)
Z3_ast Z3_API Z3_mk_bvsub_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed subtraction of t1 and t2 does not overflow.
Z3_constructor_list Z3_API Z3_mk_constructor_list(Z3_context c, unsigned num_constructors, Z3_constructor const constructors[])
Create list of constructors.
def fpSqrt(rm, a, ctx=None)
Z3_ast Z3_API Z3_mk_seq_replace(Z3_context c, Z3_ast s, Z3_ast src, Z3_ast dst)
Replace the first occurrence of src with dst in s.
def RealVar(idx, ctx=None)
def FP(name, fpsort, ctx=None)
Z3_ast Z3_API Z3_mk_seq_contains(Z3_context c, Z3_ast container, Z3_ast containee)
Check if container contains containee.
def fpDiv(rm, a, b, ctx=None)
def set_default_fp_sort(ebits, sbits, ctx=None)
Z3_ast Z3_API Z3_mk_bound(Z3_context c, unsigned index, Z3_sort ty)
Create a bound variable.
def PiecewiseLinearOrder(a, index)
void Z3_API Z3_mk_datatypes(Z3_context c, unsigned num_sorts, Z3_symbol const sort_names[], Z3_sort sorts[], Z3_constructor_list constructor_lists[])
Create mutually recursive datatypes.
Z3_ast Z3_API Z3_mk_bvadd_no_underflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed addition of t1 and t2 does not underflow.
Z3_ast Z3_API Z3_mk_seq_empty(Z3_context c, Z3_sort seq)
Create an empty sequence of the sequence sort seq.
def RecAddDefinition(f, args, body)
def fpToSBV(rm, x, s, ctx=None)
Z3_sort Z3_API Z3_mk_string_sort(Z3_context c)
Create a sort for 8 bit strings.
Z3_probe Z3_API Z3_probe_not(Z3_context x, Z3_probe p)
Return a probe that evaluates to "true" when p does not evaluate to true.
Z3_sort Z3_API Z3_mk_array_sort(Z3_context c, Z3_sort domain, Z3_sort range)
Create an array type.
Z3_ast Z3_API Z3_mk_int2bv(Z3_context c, unsigned n, Z3_ast t1)
Create an n bit bit-vector from the integer argument t1.
Z3_ast Z3_API Z3_mk_false(Z3_context c)
Create an AST node representing false.
def solve_using(s, *args, **keywords)
Z3_ast Z3_API Z3_mk_fpa_round_toward_negative(Z3_context c)
Create a numeral of RoundingMode sort which represents the TowardNegative rounding mode.
def FiniteDomainVal(val, sort, ctx=None)
unsigned Z3_API Z3_get_num_probes(Z3_context c)
Return the number of builtin probes available in Z3.
Z3_ast_vector Z3_API Z3_parse_smtlib2_string(Z3_context c, Z3_string str, unsigned num_sorts, Z3_symbol const sort_names[], Z3_sort const sorts[], unsigned num_decls, Z3_symbol const decl_names[], Z3_func_decl const decls[])
Parse the given string using the SMT-LIB2 parser.
Z3_ast Z3_API Z3_mk_atleast(Z3_context c, unsigned num_args, Z3_ast const args[], unsigned k)
Pseudo-Boolean relations.
def LinearOrder(a, index)
def BitVecSort(sz, ctx=None)
def fpAdd(rm, a, b, ctx=None)
def is_finite_domain_value(a)
Z3_sort Z3_API Z3_mk_fpa_sort_double(Z3_context c)
Create the double-precision (64-bit) FloatingPoint sort.
Z3_string Z3_API Z3_tactic_get_descr(Z3_context c, Z3_string name)
Return a string containing a description of the tactic with the given name.
def fpSub(rm, a, b, ctx=None)
Z3_ast Z3_API Z3_mk_set_member(Z3_context c, Z3_ast elem, Z3_ast set)
Check for set membership.
Z3_tactic Z3_API Z3_tactic_par_or(Z3_context c, unsigned num, Z3_tactic const ts[])
Return a tactic that applies the given tactics in parallel.
def TryFor(t, ms, ctx=None)
Z3_ast Z3_API Z3_mk_bvult(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned less than.
Z3_ast Z3_API Z3_simplify(Z3_context c, Z3_ast a)
Interface to simplifier.
def user_prop_final(ctx, cb)
def fpLEQ(a, b, ctx=None)
def EnumSort(name, values, ctx=None)
def BoolVal(val, ctx=None)
def get_default_fp_sort(ctx=None)
Z3_ast Z3_API Z3_mk_re_union(Z3_context c, unsigned n, Z3_ast const args[])
Create the union of the regular languages.
Z3_ast Z3_API Z3_mk_bvudiv(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned division.
Z3_sort Z3_API Z3_mk_re_sort(Z3_context c, Z3_sort seq)
Create a regular expression sort out of a sequence sort.
Z3_ast Z3_API Z3_mk_sign_ext(Z3_context c, unsigned i, Z3_ast t1)
Sign-extend of the given bit-vector to the (signed) equivalent bit-vector of size m+i,...
Z3_func_decl Z3_API Z3_mk_tree_order(Z3_context c, Z3_sort a, unsigned id)
create a tree ordering relation over signature a identified using index id.
Z3_sort Z3_API Z3_mk_seq_sort(Z3_context c, Z3_sort s)
Create a sequence sort out of the sort for the elements.
def SolverFor(logic, ctx=None, logFile=None)
Z3_ast Z3_API Z3_mk_pble(Z3_context c, unsigned num_args, Z3_ast const args[], int const coeffs[], int k)
Pseudo-Boolean relations.
Z3_ast Z3_API Z3_substitute(Z3_context c, Z3_ast a, unsigned num_exprs, Z3_ast const from[], Z3_ast const to[])
Substitute every occurrence of from[i] in a with to[i], for i smaller than num_exprs....
Z3_solver Z3_API Z3_mk_simple_solver(Z3_context c)
Create a new incremental solver.
Z3_ast Z3_API Z3_mk_bvsub_no_underflow(Z3_context c, Z3_ast t1, Z3_ast t2, bool is_signed)
Create a predicate that checks that the bit-wise subtraction of t1 and t2 does not underflow.
bool Z3_API Z3_open_log(Z3_string filename)
Log interaction to a file.
Z3_ast Z3_API Z3_mk_store(Z3_context c, Z3_ast a, Z3_ast i, Z3_ast v)
Array update.
Z3_ast Z3_API Z3_mk_bvredand(Z3_context c, Z3_ast t1)
Take conjunction of bits in vector, return vector of length 1.
def IntVector(prefix, sz, ctx=None)
Z3_sort Z3_API Z3_mk_fpa_sort_half(Z3_context c)
Create the half-precision (16-bit) FloatingPoint sort.
Z3_ast Z3_API Z3_mk_not(Z3_context c, Z3_ast a)
Create an AST node representing not(a).
def user_prop_pop(ctx, num_scopes)
def FreshBool(prefix="b", ctx=None)
def fpIsZero(a, ctx=None)
def PartialOrder(a, index)
void Z3_API Z3_enable_trace(Z3_string tag)
Enable tracing messages tagged as tag when Z3 is compiled in debug mode. It is a NOOP otherwise.
Z3_ast Z3_API Z3_mk_set_add(Z3_context c, Z3_ast set, Z3_ast elem)
Add an element to a set.
Z3_ast Z3_API Z3_mk_seq_index(Z3_context c, Z3_ast s, Z3_ast substr, Z3_ast offset)
Return index of first occurrence of substr in s starting from offset offset. If s does not contain su...
Z3_ast Z3_API Z3_mk_const_array(Z3_context c, Z3_sort domain, Z3_ast v)
Create the constant array.
Z3_ast Z3_API Z3_substitute_vars(Z3_context c, Z3_ast a, unsigned num_exprs, Z3_ast const to[])
Substitute the free variables in a with the expressions in to. For every i smaller than num_exprs,...
Z3_ast Z3_API Z3_mk_int2real(Z3_context c, Z3_ast t1)
Coerce an integer to a real.
Z3_ast Z3_API Z3_mk_fpa_inf(Z3_context c, Z3_sort s, bool negative)
Create a floating-point infinity of sort s.
Z3_ast Z3_API Z3_mk_re_intersect(Z3_context c, unsigned n, Z3_ast const args[])
Create the intersection of the regular languages.
Z3_ast Z3_API Z3_mk_fpa_to_fp_float(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a FloatingPoint term into another term of different FloatingPoint sort.
Z3_ast Z3_API Z3_mk_fpa_round_toward_zero(Z3_context c)
Create a numeral of RoundingMode sort which represents the TowardZero rounding mode.
def BV2Int(a, is_signed=False)
def RoundTowardZero(ctx=None)
def RecFunction(name, *sig)
Z3_sort Z3_API Z3_mk_fpa_sort_16(Z3_context c)
Create the half-precision (16-bit) FloatingPoint sort.
def is_algebraic_value(a)
def BVMulNoUnderflow(a, b)
Z3_ast Z3_API Z3_mk_fpa_abs(Z3_context c, Z3_ast t)
Floating-point absolute value.
def FreshConst(sort, prefix="c")
Z3_ast Z3_API Z3_mk_is_int(Z3_context c, Z3_ast t1)
Check if a real number is an integer.
Z3_ast Z3_API Z3_mk_fpa_nan(Z3_context c, Z3_sort s)
Create a floating-point NaN of sort s.
void Z3_API Z3_global_param_set(Z3_string param_id, Z3_string param_value)
Set a global (or module) parameter. This setting is shared by all Z3 contexts.
def fpMin(a, b, ctx=None)
Z3_ast Z3_API Z3_mk_bvsdiv_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed division of t1 and t2 does not overflow.
Z3_ast Z3_API Z3_mk_bvuge(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned greater than or equal to.
Z3_sort Z3_API Z3_mk_array_sort_n(Z3_context c, unsigned n, Z3_sort const *domain, Z3_sort range)
Create an array type with N arguments.
def BVMulNoOverflow(a, b, signed)
Z3_sort Z3_API Z3_get_sort(Z3_context c, Z3_ast a)
Return the sort of an AST node.
def Repeat(t, max=4294967295, ctx=None)
def fpToReal(x, ctx=None)
Z3_ast Z3_API Z3_mk_atmost(Z3_context c, unsigned num_args, Z3_ast const args[], unsigned k)
Pseudo-Boolean relations.
Z3_ast Z3_API Z3_mk_bvsrem(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed remainder (sign follows dividend).
Z3_sort Z3_API Z3_mk_uninterpreted_sort(Z3_context c, Z3_symbol s)
Create a free (uninterpreted) type using the given name (symbol).
def prove(claim, show=False, **keywords)
def FreshReal(prefix="b", ctx=None)
def fpIsSubnormal(a, ctx=None)
Z3_ast Z3_API Z3_mk_lambda_const(Z3_context c, unsigned num_bound, Z3_app const bound[], Z3_ast body)
Create a lambda expression using a list of constants that form the set of bound variables.
def fpIsNegative(a, ctx=None)
def fpFPToFP(rm, v, sort, ctx=None)
def fpNEQ(a, b, ctx=None)
def BVSubNoUnderflow(a, b, signed)
Z3_ast Z3_API Z3_mk_set_subset(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Check for subsetness of sets.
def ParThen(t1, t2, ctx=None)
Z3_ast Z3_API Z3_mk_bvlshr(Z3_context c, Z3_ast t1, Z3_ast t2)
Logical shift right.
def args2params(arguments, keywords, ctx=None)
Z3_ast Z3_API Z3_mk_pbge(Z3_context c, unsigned num_args, Z3_ast const args[], int const coeffs[], int k)
Pseudo-Boolean relations.
def FloatSingle(ctx=None)
Z3_sort Z3_API Z3_mk_real_sort(Z3_context c)
Create the real type.
Z3_sort Z3_API Z3_mk_fpa_sort_single(Z3_context c)
Create the single-precision (32-bit) FloatingPoint sort.
Z3_ast Z3_API Z3_mk_re_empty(Z3_context c, Z3_sort re)
Create an empty regular expression of sort re.
def fpRealToFP(rm, v, sort, ctx=None)
def RealVector(prefix, sz, ctx=None)
Z3_tactic Z3_API Z3_tactic_when(Z3_context c, Z3_probe p, Z3_tactic t)
Return a tactic that applies t to a given goal is the probe p evaluates to true. If p evaluates to fa...
def fpIsPositive(a, ctx=None)
Z3_ast Z3_API Z3_mk_re_concat(Z3_context c, unsigned n, Z3_ast const args[])
Create the concatenation of the regular languages.
Z3_ast Z3_API Z3_mk_mul(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] * ... * args[num_args-1].
Z3_ast Z3_API Z3_mk_seq_extract(Z3_context c, Z3_ast s, Z3_ast offset, Z3_ast length)
Extract subsequence starting at offset of length.
def set_option(*args, **kws)
def SubString(s, offset, length)
Z3_func_decl Z3_API Z3_mk_transitive_closure(Z3_context c, Z3_func_decl f)
create transitive closure of binary relation.
Z3_symbol Z3_API Z3_mk_int_symbol(Z3_context c, int i)
Create a Z3 symbol using an integer.
def fpToIEEEBV(x, ctx=None)
def String(name, ctx=None)
Z3_func_decl Z3_API Z3_mk_partial_order(Z3_context c, Z3_sort a, unsigned id)
create a partial ordering relation over signature a and index id.
Z3_ast Z3_API Z3_mk_fpa_round_nearest_ties_to_away(Z3_context c)
Create a numeral of RoundingMode sort which represents the NearestTiesToAway rounding mode.
Z3_func_decl Z3_API Z3_mk_piecewise_linear_order(Z3_context c, Z3_sort a, unsigned id)
create a piecewise linear ordering relation over signature a and index id.