| Home | • | Docs | • | Download | • | • | FAQ | • | Awards | • | Status | • | MSR |
|---|
An Efficient SMT Solver
AUTO_CONFIG=true with Z3 1.0. In SMT-COMP'07, Z3 0.1 used this option by default. Example: z3 AUTO_CONFIG=true -st QF_BV\spear\inn_v2.4.3\innd_innd_vc32473.smt
AUTO_CONFIG=false if you want to tune Z3 manually.
AUTO_CONFIG does not work with Simplify and Z3 formats.AUTO_CONFIG is only supported in the SMT-LIB front-end.
examples\C_API contains the shell script build.sh to build the test application using gcc.
__cdecl).
z3.dll and z3_dbg.dll?z3_dbg.dll contains assertion checking. You can use it to check whether you are using the API correctly or not.
/rd: and /rs. These options control the randomization in Z3. Example: z3 -rd:5 -rs:100 -st withOpt.smt
(bvudiv x bv0[32])?bvudiv(x, y) is uninterpreted when y = 0, one can also say that bvudiv is under-specified. For example, (= (bvudiv x bv0[32]) bv3[32]) is satisfiable. Z3 produces an interpretation for (bvudiv x bv0[32]). The default interpretation is: (bvudiv x bv0[32]) equals zero for every x. Z3 will display the intepretation for (bvudiv x bv0[32]) only when it is not the default one. Z3 uses the same approach to handle other under-specified functions such as: bvsdiv, bvurem, bvsrem, and bvsmod. Note: if you don't like this semantics, you can wrap each occurence of bvudiv with an if-then-else term: (ite (= y 0) [whatever_you_want] (bvudiv x y)).
(EXISTS (x) (EQ x 0))?Valid or unsat are conclusive. In the SMT-LIB front-end, Z3 will return unknown for satisfiable formulas that contain quantifiers. {Are there restrictions on what terms can be used in patterns?, Yes\, Z3 does not support patterns with interpreted function symbols. That is\, you cannot use functions such as +\, or relations <=\, <. As an exception, array functions select and store can be used in patterns. There is a simple trick to avoid the interpreted function symbols in patterns\, but still allow you to have the benefit of matching with them: For every interpreted function symbol add a ghost function. For example\, for <= add the function my_LEQ. Add axioms for them: (forall (x y) { (my_LEQ x y) } (iff (my_LEQ x y) (<= x y))). Use the ghost functions everywhere else. }