diff --git a/404.html b/404.html index 139be88c5..b37fb6a0f 100644 --- a/404.html +++ b/404.html @@ -12,13 +12,13 @@ Page Not Found | Online Z3 Guide - - + +
-
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + \ No newline at end of file diff --git a/Acknowledgments/index.html b/Acknowledgments/index.html index 20964197c..b1be52a45 100644 --- a/Acknowledgments/index.html +++ b/Acknowledgments/index.html @@ -12,13 +12,13 @@ Acknowledgements | Online Z3 Guide - - + +
-
Skip to main content

Acknowledgments

The z3guide was created by

  • Ruanqianqian (Lisa) Huang, UCSD, MSR Intern
  • Ayana Monroe, UNC, MSR Intern
  • Nikolaj Bjørner, Peli de Halleux, Microsoft Research

It relies on extensive help and use of the JavaScript bindings created by

  • Kevin Bakkot, Olaf Tomalka

with earlier wasm bindings by Leonardo Alt, Phillip Zucker, and Clément Pit-Claudel.

Material is based on an earlier rise4fun tutorial by Leonardo de Moura and Christoph Wintersteiger.

- - +
Skip to main content

Acknowledgments

The z3guide was created by

  • Ruanqianqian (Lisa) Huang, UCSD, MSR Intern
  • Ayana Monroe, UNC, MSR Intern
  • Nikolaj Bjørner, Peli de Halleux, Microsoft Research

It relies on extensive help and use of the JavaScript bindings created by

  • Kevin Bakkot, Olaf Tomalka

with earlier wasm bindings by Leonardo Alt, Phillip Zucker, and Clément Pit-Claudel.

Material is based on an earlier rise4fun tutorial by Leonardo de Moura and Christoph Wintersteiger.

+ + \ No newline at end of file diff --git a/assets/js/073a52b7.7b2ca748.js b/assets/js/073a52b7.7b2ca748.js new file mode 100644 index 000000000..495f5c460 --- /dev/null +++ b/assets/js/073a52b7.7b2ca748.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9612],{4218:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var n=t(7462),s=(t(7294),t(3905)),r=t(7634),m=t.n(r);const i={title:"Arithmetic",sidebar_position:1},l=void 0,o={unversionedId:"theories/Arithmetic",id:"theories/Arithmetic",title:"Arithmetic",description:"Z3 supports the theory of arithmetic described in the following places.",source:"@site/docs-smtlib/02 - theories/01 - Arithmetic.md",sourceDirName:"02 - theories",slug:"/theories/Arithmetic",permalink:"/z3guide/docs/theories/Arithmetic",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/02 - theories/01 - Arithmetic.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Arithmetic",sidebar_position:1},sidebar:"smtlibSidebar",previous:{title:"Conclusion",permalink:"/z3guide/docs/logic/Conclusion"},next:{title:"Bitvectors",permalink:"/z3guide/docs/theories/Bitvectors"}},p={},c=[{value:"Basics",id:"basics",level:2},{value:"Difference Arithmetic",id:"difference-arithmetic",level:2},{value:"Non-linear arithmetic",id:"non-linear-arithmetic",level:2},{value:"Division",id:"division",level:2},{value:"Algorithmic Fragments of Arithmetic",id:"algorithmic-fragments-of-arithmetic",level:2}],d={toc:c};function h(e){let{components:a,...t}=e;return(0,s.kt)("wrapper",(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"Z3 supports the theory of arithmetic described in the following places."),(0,s.kt)("blockquote",{parentName:"admonition"},(0,s.kt)("p",{parentName:"blockquote"}," ",(0,s.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/theories-Ints.shtml"},(0,s.kt)("strong",{parentName:"a"},"SMTLIB2")," standard Integers"))),(0,s.kt)("blockquote",{parentName:"admonition"},(0,s.kt)("p",{parentName:"blockquote"}," ",(0,s.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/theories-Reals.shtml"},(0,s.kt)("strong",{parentName:"a"},"SMTLIB2")," standard Reals"))),(0,s.kt)("blockquote",{parentName:"admonition"},(0,s.kt)("p",{parentName:"blockquote"}," ",(0,s.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/theories-Reals_Ints.shtml"},(0,s.kt)("strong",{parentName:"a"},"SMTLIB2")," standard Mixed Int Reals")))),(0,s.kt)("h2",{id:"basics"},"Basics"),(0,s.kt)("p",null,"Z3 has built-in support for integer and real constants. These two types should not be confused with machine integers (32-bit or 64-bit) and floating point numbers. These two types (sorts) represent the mathematical integers and reals. The command ",(0,s.kt)("inlineCode",{parentName:"p"},"declare-const")," is used to declare integer and real constants."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(declare-const d Real)\n(declare-const e Real)",result:{output:"",error:"",status:"z3-ran",hash:"84b5e01e5572d60505f61498e8aaddb094c3cb47"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"After constants are declared, the user can assert formulas containing that use these constants and arithmetic operators such as +, -, *, etc. The ",(0,s.kt)("inlineCode",{parentName:"p"},"check-sat")," command instructs Z3 to try to find an interpretation for the declared constants that makes all formulas true. The interpretation is basically assigning a number to each constant. If such interpretation exists, we say it is a model for the asserted formulas. The command ",(0,s.kt)("inlineCode",{parentName:"p"},"get-model")," displays the model built by Z3."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(declare-const d Real)\n(declare-const e Real)\n(assert (< a (+ b 2)))\n(assert (= a (+ (* 2 c) 10)))\n(assert (= (+ c b) 1000))\n(assert (= d e))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun b () Int\n 670)\n (define-fun a () Int\n 670)\n (define-fun c () Int\n 330)\n (define-fun e () Real\n 0.0)\n (define-fun d () Real\n 0.0)\n)\n",error:"",status:"z3-ran",hash:"d8aff7daba3c4900cac142c61a83fb1950c10b34"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Real constants should contain a decimal point. Unlike most programming languages, Z3 will not convert automatically integers into reals and vice-versa. The function to-real can be used to convert an integer expression into a real one."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(declare-const d Real)\n(declare-const e Real)\n(assert (< e (+ (to_real (+ a b)) 2.0)))\n(assert (= d (+ (to_real c) 0.5)))\n(assert (< a b))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun e () Real\n 2.0)\n (define-fun b () Int\n 1)\n (define-fun a () Int\n 0)\n (define-fun c () Int\n 0)\n (define-fun d () Real\n (/ 1.0 2.0))\n)\n",error:"",status:"z3-ran",hash:"aa7a9e1f2a4470d684908118f342a9084110afb2"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Some operators are chainable. This includes comparison operators such as ",(0,s.kt)("inlineCode",{parentName:"p"},"<")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"<="),". "),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (< a b c))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun c () Int\n 1)\n (define-fun a () Int\n (- 1))\n (define-fun b () Int\n 0)\n)\n",error:"",status:"z3-ran",hash:"ee18ba5381337b4da6be96d31b91d5c824c89521"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"We can use mixed constraints to ask questions on how reals behave under rounding.\nThe following query considers when the sum of two integers, x, y are above a constant ",(0,s.kt)("inlineCode",{parentName:"p"},"a"),",\nwhile the sum of two reals are below ",(0,s.kt)("inlineCode",{parentName:"p"},"a"),". At the same time the integers x, y are within unit distance\nto the integers. "),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const xR Real)\n(declare-const yR Real)\n(declare-const x Int)\n(declare-const y Int)\n(declare-const a Int)\n\n(assert (< (+ xR yR) a))\n(assert (> (+ x y) a))\n(assert (or (= x xR) (< x xR (+ x 1)) (< (- x 1) xR x)))\n(assert (or (= y yR) (< y yR (+ y 1)) (< (- y 1) yR y)))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun a () Int\n 0)\n (define-fun x () Int\n 1)\n (define-fun xR () Real\n (/ 2.0 3.0))\n (define-fun yR () Real\n (- (/ 5.0 6.0)))\n (define-fun y () Int\n 0)\n)\n",error:"",status:"z3-ran",hash:"2042371221822ffee039176bffa419b6fdac82f9"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("h2",{id:"difference-arithmetic"},"Difference Arithmetic"),(0,s.kt)("p",null,"Many problem classes use only limited set of arithmetical constraints. One such class is job-shop scheduling constraints.\nSimpler instances can be encoded and solved using SMT, while advanced uses of job shop scheduling problems do not\nhave efficient encodings directly into arithmetic. For job-shop problems tasks have start time, duration and constraints\nspecifying whether tasks should not overlap and ordering. To specify ordering and overlap constraints require\ncomparing just two time points separated by a constant offset. Comparisons of this form fall within the class\nof ",(0,s.kt)("em",{parentName:"p"},"difference arithmetic")," constraints. "),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-logic QF_IDL) ; optional in Z3\n(declare-fun t11 () Int)\n(declare-fun t12 () Int)\n(declare-fun t21 () Int)\n(declare-fun t22 () Int)\n(declare-fun t31 () Int)\n(declare-fun t32 () Int)\n\n(assert (and (>= t11 0) (>= t12 (+ t11 2)) (<= (+ t12 1) 8)))\n(assert (and (>= t21 0) (>= t22 (+ t21 3)) (<= (+ t22 1) 8)))\n(assert (and (>= t31 0) (>= t32 (+ t31 2)) (<= (+ t32 3) 8)))\n(assert (or (>= t11 (+ t21 3)) (>= t21 (+ t11 2))))\n(assert (or (>= t11 (+ t31 2)) (>= t31 (+ t11 2))))\n(assert (or (>= t21 (+ t31 2)) (>= t31 (+ t21 3))))\n(assert (or (>= t12 (+ t22 1)) (>= t22 (+ t12 1))))\n(assert (or (>= t12 (+ t32 3)) (>= t32 (+ t12 1))))\n(assert (or (>= t22 (+ t32 3)) (>= t32 (+ t22 1))))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun t22 () Int\n 5)\n (define-fun t12 () Int\n 7)\n (define-fun t11 () Int\n 5)\n (define-fun t31 () Int\n 0)\n (define-fun t21 () Int\n 2)\n (define-fun t32 () Int\n 2)\n)\n",error:"",status:"z3-ran",hash:"87d782a1124874298a3956fa5c37f2dcd607b7a5"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"In the example we model three jobs, each job has two tasks\nto be completed by two workers. Thus, there are six variables for every task/worker combination.\nThe start time of job 1 on worker 2 is given by ",(0,s.kt)("inlineCode",{parentName:"p"},"t12"),". It has duration 1, so has to start at least one unit before\nthe completion deadline 8. It follows task ",(0,s.kt)("inlineCode",{parentName:"p"},"t11")," which has duration 2 and cannot overlap with other tasks on work station 2."),(0,s.kt)("h2",{id:"non-linear-arithmetic"},"Non-linear arithmetic"),(0,s.kt)("p",null,"We say a formula is nonlinear if it contains expressions of the form (* t s) where t and s are not numbers. Nonlinear real arithmetic is very expensive, and Z3 is not complete for this kind of formula. The command check-sat may return unknown or loop. Nonlinear integer arithmetic is undecidable there is no procedure that is correct and terminates (for every input) with a sat or unsat answer. Yes, it is impossible to build such procedure. Note that, this does not prevent Z3 from returning an answer for many nonlinear problems. The real limit is that there will always be a nonlinear integer arithmetic formula that it will fail produce an answer."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(declare-const a Int)\n(assert (< (* a a) 3))\n(check-sat)\n(get-model)\n\n(echo "Z3 does not always find solutions to non-linear problems")\n(declare-const b Real)\n(declare-const c Real)\n(assert (= (+ (* b b b) (sin (* b c))) 7))\n(check-sat)\n\n(echo "yet it can show unsatisfiability for some nontrivial nonlinear problems...")\n(declare-const x Real)\n(declare-const y Real)\n(declare-const z Real)\n(assert (= (* x x) (+ x 2.0)))\n(assert (= (* x y) x))\n(assert (= (* (- y 1.0) z) 1.0))\n(check-sat)\n\n(reset)\n(echo "When presented only non-linear polynomial constraints over reals, Z3 uses a specialized complete solver")\n(declare-const b Real)\n(declare-const c Real)\n(assert (= (+ (* b b b) (* b c)) 3.0))\n(check-sat)\n(get-model)',result:{output:"sat\n(\n (define-fun a () Int\n 0)\n)\nZ3 does not always find solutions to non-linear problems\nunknown\nyet it can show unsatisfiability for some nontrivial nonlinear problems...\nunsat\nWhen presented only non-linear polynomial constraints over reals, Z3 uses a specialized complete solver\nsat\n(\n (define-fun b () Real\n (/ 1.0 8.0))\n (define-fun c () Real\n (/ 1535.0 64.0))\n)\n",error:"",status:"z3-ran",hash:"eef0f44fae446a64135b49b3b8056fc9da9dbf48"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("h2",{id:"division"},"Division"),(0,s.kt)("p",null,"Z3 also has support for division, integer division, modulo and remainder operators. Internally, they are all mapped to multiplication."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const r1 Int)\n(declare-const r2 Int)\n(declare-const r3 Int)\n(declare-const r4 Int)\n(declare-const r5 Int)\n(declare-const r6 Int)\n(assert (= a 10))\n(assert (= r1 (div a 4))) ; integer division\n(assert (= r2 (mod a 4))) ; mod\n(assert (= r3 (rem a 4))) ; remainder\n(assert (= r4 (div a (- 4)))) ; integer division\n(assert (= r5 (mod a (- 4)))) ; mod\n(assert (= r6 (rem a (- 4)))) ; remainder\n(declare-const b Real)\n(declare-const c Real)\n(assert (= b (/ c 3.0)))\n(assert (= c 20.0))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun r4 () Int\n (- 2))\n (define-fun r5 () Int\n 2)\n (define-fun r6 () Int\n (- 2))\n (define-fun r3 () Int\n 2)\n (define-fun b () Real\n (/ 20.0 3.0))\n (define-fun r2 () Int\n 2)\n (define-fun r1 () Int\n 2)\n (define-fun c () Real\n 20.0)\n (define-fun a () Int\n 10)\n)\n",error:"",status:"z3-ran",hash:"532b4209c39f259fada8ea4f438afdc1efcd2557"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"In Z3, division by zero is allowed, but the result is not specified. Division is not a partial function.\nActually, in Z3 all functions are total, although the result may be under-specified in some cases like division by zero."),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"We say that an interpreted function (such as ",(0,s.kt)("inlineCode",{parentName:"p"},"/"),") is ",(0,s.kt)("em",{parentName:"p"},"under-specified")," when the meaning of the function is not fixed on all values\nof arguments. The division, modulus and remainder functions are ",(0,s.kt)("em",{parentName:"p"},"under-specified")," when the second argument is 0. Constraints that\nallow the second arguments to these functions to be 0 can still be satisfiable when there are interpretations of the functions\nat 0 that satisfy the constraints.")),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Real)\n; The following formula is satisfiable since division by zero is not specified.\n(assert (= (/ a 0.0) 10.0)) \n(check-sat)\n(get-model)\n\n; Although division by zero is not specified, division is still a function.\n; Therefore, (/ a 0.0) cannot evaluate to both 10.0 and 2.0.\n(assert (= (/ a 0.0) 2.0)) \n(check-sat)",result:{output:"sat\n(\n (define-fun a () Real\n 38.0)\n (define-fun /0 ((x!0 Real) (x!1 Real)) Real\n 10.0)\n)\nunsat\n",error:"",status:"z3-ran",hash:"3298c16f127d570132fd7fba8482a7525e428bdd"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"If you are not happy with this behavior, you may use the ",(0,s.kt)("inlineCode",{parentName:"p"},"ite")," (if-then-else) operator to guard every division, and assign whatever interpretation you like to the division by zero. This example uses define-fun constructor to create a new operator mydiv. This is essentially a macro, and Z3 will expand its definition for every application of mydiv."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"; defining my own division operator where x0.0 == 0.0 for every x.\n(define-fun mydiv ((x Real) (y Real)) Real\n (if (not (= y 0.0))\n (/ x y)\n 0.0))\n(declare-const a Real)\n(declare-const b Real)\n(assert (= (mydiv a b) 1.0))\n(assert (= b 0.0))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"888b584c6554dcc3ae0f65d16e7e4449c228df98"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("h2",{id:"algorithmic-fragments-of-arithmetic"},"Algorithmic Fragments of Arithmetic"),(0,s.kt)("p",null,"Z3 contains a combination of several engines for solving arithmetic formulas.\nThe engines are invoked based on the shape of arithmetic formulas.\nFor linear real arithmetic formulas it uses dual simplex to determine feasibility.\nFor linear integer arithmetic formulas it uses techniques from integer programming: cuts and branch and bound.\nThere are specialized solvers for different arithmetic fragments and, finally, for non-linear arithmetic\nconstraints z3 contains several small hammers that integrate Grobner basis simplifications, bounds propagation,\nnon-linear cylindric algebraic decomposition and reducing non-linear constraints to linear form by sampling at tangent points."),(0,s.kt)("table",null,(0,s.kt)("thead",{parentName:"table"},(0,s.kt)("tr",{parentName:"thead"},(0,s.kt)("th",{parentName:"tr",align:null},"Logic"),(0,s.kt)("th",{parentName:"tr",align:null},"Fragment"),(0,s.kt)("th",{parentName:"tr",align:null},"Solver"),(0,s.kt)("th",{parentName:"tr",align:null},"Example"))),(0,s.kt)("tbody",{parentName:"table"},(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"LRA"),(0,s.kt)("td",{parentName:"tr",align:null},"Linear Real Arithmetic"),(0,s.kt)("td",{parentName:"tr",align:null},"Dual Simplex"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"x"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mfrac",{parentName:"mrow"},(0,s.kt)("mn",{parentName:"mfrac"},"1"),(0,s.kt)("mn",{parentName:"mfrac"},"2")),(0,s.kt)("mi",{parentName:"mrow"},"y"),(0,s.kt)("mo",{parentName:"mrow"},"\u2264"),(0,s.kt)("mn",{parentName:"mrow"},"3")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x + \\frac{1}{2}y \\leq 3")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,s.kt)("span",{parentName:"span",className:"mfrac"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8451em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.655em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,s.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,s.kt)("span",{parentName:"span",style:{top:"-3.394em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.345em"}},(0,s.kt)("span",{parentName:"span"}))))),(0,s.kt)("span",{parentName:"span",className:"mclose nulldelimiter"})),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2264"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"3"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"LIA"),(0,s.kt)("td",{parentName:"tr",align:null},"Linear Integer Arithmetic"),(0,s.kt)("td",{parentName:"tr",align:null},"CutSat"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"a"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mn",{parentName:"mrow"},"3"),(0,s.kt)("mi",{parentName:"mrow"},"b"),(0,s.kt)("mo",{parentName:"mrow"},"\u2264"),(0,s.kt)("mn",{parentName:"mrow"},"3")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"a + 3b \\leq 3")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8304em",verticalAlign:"-0.136em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"3"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"b"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2264"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"3"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"LIRA"),(0,s.kt)("td",{parentName:"tr",align:null},"Mixed Real/Integer"),(0,s.kt)("td",{parentName:"tr",align:null},"Cuts + Branch"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"x"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mi",{parentName:"mrow"},"a"),(0,s.kt)("mo",{parentName:"mrow"},"\u2265"),(0,s.kt)("mn",{parentName:"mrow"},"4")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x + a \\geq 4")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7719em",verticalAlign:"-0.136em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2265"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"IDL"),(0,s.kt)("td",{parentName:"tr",align:null},"Integer Difference Logic"),(0,s.kt)("td",{parentName:"tr",align:null},"Floyd-Warshall"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"a"),(0,s.kt)("mo",{parentName:"mrow"},"\u2212"),(0,s.kt)("mi",{parentName:"mrow"},"b"),(0,s.kt)("mo",{parentName:"mrow"},"\u2264"),(0,s.kt)("mn",{parentName:"mrow"},"4")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"a - b \\leq 4")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8304em",verticalAlign:"-0.136em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"b"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2264"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"RDL"),(0,s.kt)("td",{parentName:"tr",align:null},"Real Difference Logic"),(0,s.kt)("td",{parentName:"tr",align:null},"Bellman-Ford"),(0,s.kt)("td",{parentName:"tr",align:null})),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"UTVPI"),(0,s.kt)("td",{parentName:"tr",align:null},"Unit two-variable per inequality"),(0,s.kt)("td",{parentName:"tr",align:null}),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"x"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mi",{parentName:"mrow"},"y"),(0,s.kt)("mo",{parentName:"mrow"},"\u2264"),(0,s.kt)("mn",{parentName:"mrow"},"4")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x + y \\leq 4")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8304em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2264"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"NRA"),(0,s.kt)("td",{parentName:"tr",align:null},"Polynomial Real Arithmetic"),(0,s.kt)("td",{parentName:"tr",align:null},"Model based CAD, Incremental Linearization"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("msup",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msup"},"x"),(0,s.kt)("mn",{parentName:"msup"},"2")),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("msup",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msup"},"y"),(0,s.kt)("mn",{parentName:"msup"},"2")),(0,s.kt)("mo",{parentName:"mrow"},"<"),(0,s.kt)("mn",{parentName:"mrow"},"1")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x^2 + y^2 < 1")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8974em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0085em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"<"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"1"))))))))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/073a52b7.dee8e68c.js b/assets/js/073a52b7.dee8e68c.js deleted file mode 100644 index 52d4e595b..000000000 --- a/assets/js/073a52b7.dee8e68c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9612],{4218:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var n=t(7462),s=(t(7294),t(3905)),r=t(7634),m=t.n(r);const i={title:"Arithmetic",sidebar_position:1},l=void 0,o={unversionedId:"theories/Arithmetic",id:"theories/Arithmetic",title:"Arithmetic",description:"Z3 supports the theory of arithmetic described in the following places.",source:"@site/docs-smtlib/02 - theories/01 - Arithmetic.md",sourceDirName:"02 - theories",slug:"/theories/Arithmetic",permalink:"/z3guide/docs/theories/Arithmetic",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/02 - theories/01 - Arithmetic.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Arithmetic",sidebar_position:1},sidebar:"smtlibSidebar",previous:{title:"Conclusion",permalink:"/z3guide/docs/logic/Conclusion"},next:{title:"Bitvectors",permalink:"/z3guide/docs/theories/Bitvectors"}},p={},c=[{value:"Basics",id:"basics",level:2},{value:"Difference Arithmetic",id:"difference-arithmetic",level:2},{value:"Non-linear arithmetic",id:"non-linear-arithmetic",level:2},{value:"Division",id:"division",level:2},{value:"Algorithmic Fragments of Arithmetic",id:"algorithmic-fragments-of-arithmetic",level:2}],d={toc:c};function h(e){let{components:a,...t}=e;return(0,s.kt)("wrapper",(0,n.Z)({},d,t,{components:a,mdxType:"MDXLayout"}),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"Z3 supports the theory of arithmetic described in the following places."),(0,s.kt)("blockquote",{parentName:"admonition"},(0,s.kt)("p",{parentName:"blockquote"}," ",(0,s.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/theories-Ints.shtml"},(0,s.kt)("strong",{parentName:"a"},"SMTLIB2")," standard Integers"))),(0,s.kt)("blockquote",{parentName:"admonition"},(0,s.kt)("p",{parentName:"blockquote"}," ",(0,s.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/theories-Reals.shtml"},(0,s.kt)("strong",{parentName:"a"},"SMTLIB2")," standard Reals"))),(0,s.kt)("blockquote",{parentName:"admonition"},(0,s.kt)("p",{parentName:"blockquote"}," ",(0,s.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/theories-Reals_Ints.shtml"},(0,s.kt)("strong",{parentName:"a"},"SMTLIB2")," standard Mixed Int Reals")))),(0,s.kt)("h2",{id:"basics"},"Basics"),(0,s.kt)("p",null,"Z3 has builtin support for integer and real constants. This two types should not be confused with machine integers (32-bit or 64-bit) and floating point numbers. These two types (sorts) represent the mathematical integers and reals. The command declare-const is used to declare integer and real constants."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(declare-const d Real)\n(declare-const e Real)",result:{output:"",error:"",status:"z3-ran",hash:"84b5e01e5572d60505f61498e8aaddb094c3cb47"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"After constants are declared, the user can assert.smt formulas containing these constants. The formulas contain arithmetic operators such as +, -, *, and so on. The command check-sat will instruct Z3 to try to find an interpretation for the declared constants that makes all formulas true. The interpretation is basically assigning a number to each constant. If such interpretation exists, we say it is a model for the asserted formulas. The command get-model displays the model built by Z3."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(declare-const d Real)\n(declare-const e Real)\n(assert (< a (+ b 2)))\n(assert (= a (+ (* 2 c) 10)))\n(assert (= (+ c b) 1000))\n(assert (= d e))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun b () Int\n 670)\n (define-fun a () Int\n 670)\n (define-fun c () Int\n 330)\n (define-fun e () Real\n 0.0)\n (define-fun d () Real\n 0.0)\n)\n",error:"",status:"z3-ran",hash:"d8aff7daba3c4900cac142c61a83fb1950c10b34"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Real constants should contain a decimal point. Unlike most programming languages, Z3 will not convert automatically integers into reals and vice-versa. The function to-real can be used to convert an integer expression into a real one."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(declare-const d Real)\n(declare-const e Real)\n(assert (< e (+ (to_real (+ a b)) 2.0)))\n(assert (= d (+ (to_real c) 0.5)))\n(assert (< a b))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun e () Real\n 2.0)\n (define-fun b () Int\n 1)\n (define-fun a () Int\n 0)\n (define-fun c () Int\n 0)\n (define-fun d () Real\n (/ 1.0 2.0))\n)\n",error:"",status:"z3-ran",hash:"aa7a9e1f2a4470d684908118f342a9084110afb2"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Some operators are chainable. This includes comparison operators such as ",(0,s.kt)("inlineCode",{parentName:"p"},"<")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"<="),". "),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (< a b c))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun c () Int\n 1)\n (define-fun a () Int\n (- 1))\n (define-fun b () Int\n 0)\n)\n",error:"",status:"z3-ran",hash:"ee18ba5381337b4da6be96d31b91d5c824c89521"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"We can use mixed constraints to ask questions on how reals behave under rounding.\nThe following query considers when the sum of two integers, x, y are above a constant ",(0,s.kt)("inlineCode",{parentName:"p"},"a"),",\nwhile the sum of two reals are below ",(0,s.kt)("inlineCode",{parentName:"p"},"a"),". At the same time the integers x, y are within unit distance\nto the integers. "),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const xR Real)\n(declare-const yR Real)\n(declare-const x Int)\n(declare-const y Int)\n(declare-const a Int)\n\n(assert (< (+ xR yR) a))\n(assert (> (+ x y) a))\n(assert (or (= x xR) (< x xR (+ x 1)) (< (- x 1) xR x)))\n(assert (or (= y yR) (< y yR (+ y 1)) (< (- y 1) yR y)))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun a () Int\n 0)\n (define-fun x () Int\n 1)\n (define-fun xR () Real\n (/ 2.0 3.0))\n (define-fun yR () Real\n (- (/ 5.0 6.0)))\n (define-fun y () Int\n 0)\n)\n",error:"",status:"z3-ran",hash:"2042371221822ffee039176bffa419b6fdac82f9"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("h2",{id:"difference-arithmetic"},"Difference Arithmetic"),(0,s.kt)("p",null,"Many problem classes use only limited set of arithmetical constraints. One such class is job-shop scheduling constraints.\nSimpler instances can be encoded and solved using SMT, while advanced uses of job shop scheduling problems do not\nhave efficient encodings directly into arithmetic. For job-shop problems tasks have start time, duration and constraints\nspecifying whether tasks should not overlap and ordering. To specify ordering and overlap constraints require\ncomparing just two time points separated by a constant offset. Comparisons of this form fall within the class\nof ",(0,s.kt)("em",{parentName:"p"},"difference arithmetic")," constraints. "),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-logic QF_IDL) ; optional in Z3\n(declare-fun t11 () Int)\n(declare-fun t12 () Int)\n(declare-fun t21 () Int)\n(declare-fun t22 () Int)\n(declare-fun t31 () Int)\n(declare-fun t32 () Int)\n\n(assert (and (>= t11 0) (>= t12 (+ t11 2)) (<= (+ t12 1) 8)))\n(assert (and (>= t21 0) (>= t22 (+ t21 3)) (<= (+ t22 1) 8)))\n(assert (and (>= t31 0) (>= t32 (+ t31 2)) (<= (+ t32 3) 8)))\n(assert (or (>= t11 (+ t21 3)) (>= t21 (+ t11 2))))\n(assert (or (>= t11 (+ t31 2)) (>= t31 (+ t11 2))))\n(assert (or (>= t21 (+ t31 2)) (>= t31 (+ t21 3))))\n(assert (or (>= t12 (+ t22 1)) (>= t22 (+ t12 1))))\n(assert (or (>= t12 (+ t32 3)) (>= t32 (+ t12 1))))\n(assert (or (>= t22 (+ t32 3)) (>= t32 (+ t22 1))))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun t22 () Int\n 5)\n (define-fun t12 () Int\n 7)\n (define-fun t11 () Int\n 5)\n (define-fun t31 () Int\n 0)\n (define-fun t21 () Int\n 2)\n (define-fun t32 () Int\n 2)\n)\n",error:"",status:"z3-ran",hash:"87d782a1124874298a3956fa5c37f2dcd607b7a5"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"In the example we model three jobs, each job has two tasks\nto be completed by two workers. Thus, there are six variables for every task/worker combination.\nThe start time of job 1 on worker 2 is given by ",(0,s.kt)("inlineCode",{parentName:"p"},"t12"),". It has duration 1, so has to start at least one unit before\nthe completion deadline 8. It follows task ",(0,s.kt)("inlineCode",{parentName:"p"},"t11")," which has duration 2 adn cannot overlap with other tasks on work station 2."),(0,s.kt)("h2",{id:"non-linear-arithmetic"},"Non-linear arithmetic"),(0,s.kt)("p",null,"We say a formula is nonlinear if it contains expressions of the form (* t s) where t and s are not numbers. Nonlinear real arithmetic is very expensive, and Z3 is not complete for this kind of formula. The command check-sat may return unknown or loop. Nonlinear integer arithmetic is undecidable there is no procedure that is correct and terminates (for every input) with a sat or unsat answer. Yes, it is impossible to build such procedure. Note that, this does not prevent Z3 from returning an answer for many nonlinear problems. The real limit is that there will always be a nonlinear integer arithmetic formula that it will fail produce an answer."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(declare-const a Int)\n(assert (< (* a a) 3))\n(check-sat)\n(get-model)\n\n(echo "Z3 does not always find solutions to non-linear problems")\n(declare-const b Real)\n(declare-const c Real)\n(assert (= (+ (* b b b) (sin (* b c))) 7))\n(check-sat)\n\n(echo "yet it can show unsatisfiabiltiy for some nontrivial nonlinear problems...")\n(declare-const x Real)\n(declare-const y Real)\n(declare-const z Real)\n(assert (= (* x x) (+ x 2.0)))\n(assert (= (* x y) x))\n(assert (= (* (- y 1.0) z) 1.0))\n(check-sat)\n\n(reset)\n(echo "When presented only non-linear polynomial constraints over reals, Z3 uses a specialized complete solver")\n(declare-const b Real)\n(declare-const c Real)\n(assert (= (+ (* b b b) (* b c)) 3.0))\n(check-sat)\n(get-model)',result:{output:"sat\n(\n (define-fun a () Int\n 0)\n)\nZ3 does not always find solutions to non-linear problems\nunknown\nyet it can show unsatisfiabiltiy for some nontrivial nonlinear problems...\nunsat\nWhen presented only non-linear polynomial constraints over reals, Z3 uses a specialized complete solver\nsat\n(\n (define-fun b () Real\n (/ 1.0 8.0))\n (define-fun c () Real\n (/ 1535.0 64.0))\n)\n",error:"",status:"z3-ran",hash:"e62e5617ecf31b57b4907b8992a3eb5afc020ce1"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("h2",{id:"division"},"Division"),(0,s.kt)("p",null,"Z3 also has support for division, integer division, modulo and remainder operators. Internally, they are all mapped to multiplication."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const r1 Int)\n(declare-const r2 Int)\n(declare-const r3 Int)\n(declare-const r4 Int)\n(declare-const r5 Int)\n(declare-const r6 Int)\n(assert (= a 10))\n(assert (= r1 (div a 4))) ; integer division\n(assert (= r2 (mod a 4))) ; mod\n(assert (= r3 (rem a 4))) ; remainder\n(assert (= r4 (div a (- 4)))) ; integer division\n(assert (= r5 (mod a (- 4)))) ; mod\n(assert (= r6 (rem a (- 4)))) ; remainder\n(declare-const b Real)\n(declare-const c Real)\n(assert (= b (/ c 3.0)))\n(assert (= c 20.0))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun r4 () Int\n (- 2))\n (define-fun r5 () Int\n 2)\n (define-fun r6 () Int\n (- 2))\n (define-fun r3 () Int\n 2)\n (define-fun b () Real\n (/ 20.0 3.0))\n (define-fun r2 () Int\n 2)\n (define-fun r1 () Int\n 2)\n (define-fun c () Real\n 20.0)\n (define-fun a () Int\n 10)\n)\n",error:"",status:"z3-ran",hash:"532b4209c39f259fada8ea4f438afdc1efcd2557"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"In Z3, division by zero is allowed, but the result is not specified. Division is not a partial function.\nActually, in Z3 all functions are total, although the result may be under-specified in some cases like division by zero."),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"We say that an interpreted function (such as ",(0,s.kt)("inlineCode",{parentName:"p"},"/"),") is ",(0,s.kt)("em",{parentName:"p"},"under-specified")," when the meaning of the function is not fixed on all values\nof arguments. The division, modulus and remainder functions are ",(0,s.kt)("em",{parentName:"p"},"under-specified")," when the second argument is 0. Constraints that\nallow the second arguments to these functions to be 0 can still be satisfiable when there are interepretations of the functions\nat 0 that satisfy the constraints.")),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Real)\n; The following formula is satisfiable since division by zero is not specified.\n(assert (= (/ a 0.0) 10.0)) \n(check-sat)\n(get-model)\n\n; Although division by zero is not specified, division is still a function.\n; So, (/ a 0.0) cannot evaluated to 10.0 and 2.0.\n(assert (= (/ a 0.0) 2.0)) \n(check-sat)",result:{output:"sat\n(\n (define-fun a () Real\n 38.0)\n (define-fun /0 ((x!0 Real) (x!1 Real)) Real\n 10.0)\n)\nunsat\n",error:"",status:"z3-ran",hash:"ad42ec5bf368f9169c38e4fdaabb675e529727d1"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"If you are not happy with this behavior, you may use ite (if-then-else) operator to guard every division, and assign whatever interpretation you like to the division by zero. This example uses define-fun constructor to create a new operator mydiv. This is essentially a macro, and Z3 will expand its definition for every application of mydiv."),(0,s.kt)(m(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"; defining my own division operator where x0.0 == 0.0 for every x.\n(define-fun mydiv ((x Real) (y Real)) Real\n (if (not (= y 0.0))\n (/ x y)\n 0.0))\n(declare-const a Real)\n(declare-const b Real)\n(assert (= (mydiv a b) 1.0))\n(assert (= b 0.0))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"888b584c6554dcc3ae0f65d16e7e4449c228df98"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("h2",{id:"algorithmic-fragments-of-arithmetic"},"Algorithmic Fragments of Arithmetic"),(0,s.kt)("p",null,"Z3 contains a combination of several engines for solving arithmetic formulas.\nThe engines are invoked based on the shape of arithmetic formulas.\nFor linear real arithmetic formulas it uses dual simplex to determine feasibility.\nFor linear integer arithmetic formulas it uses thechniques from integer programming: cuts and branch and bound.\nThere are specialized solvers for different arithmetic fragments and, finally, for non-linear arithmetic\nconstraints z3 contains several small hammers that integrate Grobner basis simplificaitons, bounds propagation,\nnon-linear cylindric algebraic decomposition and reducing non-linear constraints to linear form by sampling at tangent points."),(0,s.kt)("table",null,(0,s.kt)("thead",{parentName:"table"},(0,s.kt)("tr",{parentName:"thead"},(0,s.kt)("th",{parentName:"tr",align:null},"Logic"),(0,s.kt)("th",{parentName:"tr",align:null},"Fragment"),(0,s.kt)("th",{parentName:"tr",align:null},"Solver"),(0,s.kt)("th",{parentName:"tr",align:null},"Example"))),(0,s.kt)("tbody",{parentName:"table"},(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"LRA"),(0,s.kt)("td",{parentName:"tr",align:null},"Linear Real Arithmetic"),(0,s.kt)("td",{parentName:"tr",align:null},"Dual Simplex"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"x"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mfrac",{parentName:"mrow"},(0,s.kt)("mn",{parentName:"mfrac"},"1"),(0,s.kt)("mn",{parentName:"mfrac"},"2")),(0,s.kt)("mi",{parentName:"mrow"},"y"),(0,s.kt)("mo",{parentName:"mrow"},"\u2264"),(0,s.kt)("mn",{parentName:"mrow"},"3")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x + \\frac{1}{2}y \\leq 3")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1.1901em",verticalAlign:"-0.345em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mopen nulldelimiter"}),(0,s.kt)("span",{parentName:"span",className:"mfrac"},(0,s.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8451em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-2.655em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,s.kt)("span",{parentName:"span",style:{top:"-3.23em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"frac-line",style:{borderBottomWidth:"0.04em"}})),(0,s.kt)("span",{parentName:"span",style:{top:"-3.394em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,s.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.345em"}},(0,s.kt)("span",{parentName:"span"}))))),(0,s.kt)("span",{parentName:"span",className:"mclose nulldelimiter"})),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2264"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"3"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"LIA"),(0,s.kt)("td",{parentName:"tr",align:null},"Linear Integer Arithmetic"),(0,s.kt)("td",{parentName:"tr",align:null},"CutSat"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"a"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mn",{parentName:"mrow"},"3"),(0,s.kt)("mi",{parentName:"mrow"},"b"),(0,s.kt)("mo",{parentName:"mrow"},"\u2264"),(0,s.kt)("mn",{parentName:"mrow"},"3")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"a + 3b \\leq 3")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8304em",verticalAlign:"-0.136em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"3"),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"b"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2264"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"3"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"LIRA"),(0,s.kt)("td",{parentName:"tr",align:null},"Mixed Real/Integer"),(0,s.kt)("td",{parentName:"tr",align:null},"Cuts + Branch"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"x"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mi",{parentName:"mrow"},"a"),(0,s.kt)("mo",{parentName:"mrow"},"\u2265"),(0,s.kt)("mn",{parentName:"mrow"},"4")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x + a \\geq 4")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7719em",verticalAlign:"-0.136em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2265"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"IDL"),(0,s.kt)("td",{parentName:"tr",align:null},"Integer Difference Logic"),(0,s.kt)("td",{parentName:"tr",align:null},"Floyd-Warshall"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"a"),(0,s.kt)("mo",{parentName:"mrow"},"\u2212"),(0,s.kt)("mi",{parentName:"mrow"},"b"),(0,s.kt)("mo",{parentName:"mrow"},"\u2264"),(0,s.kt)("mn",{parentName:"mrow"},"4")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"a - b \\leq 4")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8304em",verticalAlign:"-0.136em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"b"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2264"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"RDL"),(0,s.kt)("td",{parentName:"tr",align:null},"Real Difference Logic"),(0,s.kt)("td",{parentName:"tr",align:null},"Bellman-Ford"),(0,s.kt)("td",{parentName:"tr",align:null})),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"UTVPI"),(0,s.kt)("td",{parentName:"tr",align:null},"Unit two-variable per inequality"),(0,s.kt)("td",{parentName:"tr",align:null}),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"x"),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("mi",{parentName:"mrow"},"y"),(0,s.kt)("mo",{parentName:"mrow"},"\u2264"),(0,s.kt)("mn",{parentName:"mrow"},"4")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x + y \\leq 4")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8304em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"\u2264"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"4"))))))),(0,s.kt)("tr",{parentName:"tbody"},(0,s.kt)("td",{parentName:"tr",align:null},"NRA"),(0,s.kt)("td",{parentName:"tr",align:null},"Polynomial Real Arithmetic"),(0,s.kt)("td",{parentName:"tr",align:null},"Model based CAD, Incremental Linearization"),(0,s.kt)("td",{parentName:"tr",align:null},(0,s.kt)("span",{parentName:"td",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("msup",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msup"},"x"),(0,s.kt)("mn",{parentName:"msup"},"2")),(0,s.kt)("mo",{parentName:"mrow"},"+"),(0,s.kt)("msup",{parentName:"mrow"},(0,s.kt)("mi",{parentName:"msup"},"y"),(0,s.kt)("mn",{parentName:"msup"},"2")),(0,s.kt)("mo",{parentName:"mrow"},"<"),(0,s.kt)("mn",{parentName:"mrow"},"1")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x^2 + y^2 < 1")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8974em",verticalAlign:"-0.0833em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,s.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0085em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,s.kt)("span",{parentName:"span",className:"msupsub"},(0,s.kt)("span",{parentName:"span",className:"vlist-t"},(0,s.kt)("span",{parentName:"span",className:"vlist-r"},(0,s.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,s.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,s.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,s.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,s.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,s.kt)("span",{parentName:"span",className:"mrel"},"<"),(0,s.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,s.kt)("span",{parentName:"span",className:"mord"},"1"))))))))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0a1ab64f.00d50011.js b/assets/js/0a1ab64f.00d50011.js deleted file mode 100644 index a6ff44b96..000000000 --- a/assets/js/0a1ab64f.00d50011.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1649],{1245:(n,e,a)=>{a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>s,toc:()=>v});var t=a(7462),i=(a(7294),a(3905)),r=a(7634),d=a.n(r);const o={title:"Quantifiers",sidebar_position:5},l=void 0,s={unversionedId:"logic/Quantifiers",id:"logic/Quantifiers",title:"Quantifiers",description:"Z3 is a decision procedure for the combination of the previous quantifier-free theories. That is, it can answer whether a quantifier-free formula, modulo the theories referenced by the formula, is satisfiable or whether it is unsatisfiable. Z3 also accepts and can work with formulas that use quantifiers. It is no longer a decision procedure for such formulas in general (and for good reasons, as there can be no decision procedure for first-order logic).",source:"@site/docs-smtlib/01 - logic/05 - Quantifiers.md",sourceDirName:"01 - logic",slug:"/logic/Quantifiers",permalink:"/z3guide/docs/logic/Quantifiers",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/05 - Quantifiers.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Quantifiers",sidebar_position:5},sidebar:"smtlibSidebar",previous:{title:"Uninterpreted Functions and Constants",permalink:"/z3guide/docs/logic/Uninterpreted-functions-and-constants"},next:{title:"Lambdas",permalink:"/z3guide/docs/logic/Lambdas"}},u={},v=[{value:"Modeling with Quantifiers",id:"modeling-with-quantifiers",level:3},{value:"Patterns",id:"patterns",level:3},{value:"Multi-patterns",id:"multi-patterns",level:3},{value:"No patterns",id:"no-patterns",level:3},{value:"Model-based Quantifier Instantiation",id:"model-based-quantifier-instantiation",level:3},{value:"Effectively Propositional",id:"effectively-propositional",level:4},{value:"Stratified Sorts Fragment",id:"stratified-sorts-fragment",level:4},{value:"Array Property Fragment",id:"array-property-fragment",level:4},{value:"List Fragment",id:"list-fragment",level:4},{value:"Essentially (Almost) Uninterpreted Fragment",id:"essentially-almost-uninterpreted-fragment",level:4},{value:"Quantified Bit-Vector Formulas",id:"quantified-bit-vector-formulas",level:4},{value:"Conditional (and Pseudo) Macros",id:"conditional-and-pseudo-macros",level:4},{value:"My formula is not in any of the fragments above",id:"my-formula-is-not-in-any-of-the-fragments-above",level:4}],_={toc:v};function x(n){let{components:e,...a}=n;return(0,i.kt)("wrapper",(0,t.Z)({},_,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Z3 is a ",(0,i.kt)("a",{parentName:"p",href:"http://www.decision-procedures.org/"},(0,i.kt)("em",{parentName:"a"},"decision procedure"))," for the combination of the previous quantifier-free theories. That is, it can answer whether a quantifier-free formula, modulo the theories referenced by the formula, is satisfiable or whether it is unsatisfiable. Z3 also accepts and can work with formulas that use quantifiers. It is no longer a decision procedure for such formulas in general (and for good reasons, as there can be no decision procedure for first-order logic)."),(0,i.kt)("p",null,"Nevertheless, Z3 is often able to handle formulas involving quantifiers. It uses several approaches to handle quantifiers. The most prolific approach is using ",(0,i.kt)("em",{parentName:"p"},"pattern-based")," quantifier instantiation. This approach allows instantiating quantified formulas with ground terms that appear in the current search context based on ",(0,i.kt)("em",{parentName:"p"},"pattern annotations")," on quantifiers. The pattern-based instantiation method is quite effective, even though it is inherently incomplete. "),(0,i.kt)("p",null,"Z3 also contains a model-based quantifier instantiation component that uses a model construction to find good terms to instantiate quantifiers with; and Z3 also handles many decidable fragments."),(0,i.kt)("h3",{id:"modeling-with-quantifiers"},"Modeling with Quantifiers"),(0,i.kt)("p",null,"Suppose we want to model an object oriented type system with single inheritance. We would need a predicate for sub-typing. Sub-typing should be a partial order, and respect single inheritance. For some built-in type constructors, such as for array-of, sub-typing should be monotone."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort Type)\n(declare-fun subtype (Type Type) Bool)\n(declare-fun array-of (Type) Type)\n(assert (forall ((x Type)) (subtype x x)))\n(assert (forall ((x Type) (y Type) (z Type))\n (= (and (subtype x y) (subtype y z)) \n (subtype x z)))) \n(assert (forall ((x Type) (y Type))\n (= (and (subtype x y) (subtype y x)) \n (= x y))))\n(assert (forall ((x Type) (y Type) (z Type))\n (= (and (subtype x y) (subtype x z)) \n (or (subtype y z) (subtype z y))))) \n(assert (forall ((x Type) (y Type))\n (= (subtype x y) \n (subtype (array-of x) (array-of y)))))\n(declare-const root-type Type)\n(assert (forall ((x Type)) (subtype x root-type)))\n(check-sat)",result:{output:"sat\n",error:"",status:"z3-ran",hash:"66d69453fb13bf78248eff80b791b366fc99ec64"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Raymond Smullyan's puzzles are famous logical brain teasers. You can use predicate logic to encode and solve these.\nOn a fictional island, all inhabitants are either knights, who always tell the truth, or knaves, who always lie.\nJohn and Bill are residents of the island of knights and knaves."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort Inhabitant)\n(declare-datatype Statement (truth falsity))\n(declare-datatype Identity (Knave Knight))\n(declare-const John Inhabitant)\n(declare-const Bill Inhabitant)\n(declare-fun Is (Inhabitant Identity) Statement)\n(declare-fun Says (Inhabitant Statement) Bool)\n(declare-fun Holds (Statement) Bool)\n(assert (Holds truth))\n(assert (not (Holds falsity)))\n(assert (forall ((x Inhabitant)) (xor (Holds (Is x Knave)) (Holds (Is x Knight)))))\n(assert (forall ((x Inhabitant) (y Statement)) (=> (Holds (Is x Knave)) (Says x y) (not (Holds y)))))\n(assert (forall ((x Inhabitant) (y Statement)) (=> (Holds (Is x Knight)) (Says x y) (Holds y))))\n\n; Question 1\n; John says: We are both knaves\n; Who is what?\n\n(push)\n(declare-fun And (Statement Statement) Statement)\n(assert (forall ((x Statement) (y Statement)) (= (Holds (And x y)) (and (Holds x) (Holds y)))))\n(assert (Says John (And (Is John Knave) (Is Bill Knave))))\n(check-sat)\n(eval (Holds (Is John Knight)))\n(eval (Holds (Is Bill Knight)))\n(pop)\n\n\n; Question 2\n; John: If (and only if) Bill is a knave, then I am a knave.\n; Bill: We are of different kinds.\n; Who is who?\n\n(push)\n\n(declare-fun Not (Statement) Statement)\n(declare-fun Iff (Statement Statement) Statement)\n(assert (forall ((x Statement)) (= (Holds (Not x)) (not (Holds x)))))\n(assert (forall ((x Statement) (y Statement)) (= (Holds (Iff x y)) (= (Holds x) (Holds y)))))\n\n(assert (Says John (Iff (Is Bill Knave) (Is John Knave))))\n(assert (Says Bill (Not (Iff (Is Bill Knave) (Is John Knave)))))\n(check-sat)\n(eval (Holds (Is John Knight)))\n(eval (Holds (Is Bill Knight)))\n(pop)\n",result:{output:"sat\nfalse\ntrue\nsat\nfalse\ntrue\n",error:"",status:"z3-ran",hash:"a6418913ca0be86f12596a4d32eb51c9bb96e372"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Another related Smullyan puzzle asks\nJohn and Bill are standing at a fork in the road. You know that one of\nthem is a knight and the other a knave, but you don't know which.\nYou also know that one road leads to Death, and the other leads to Freedom.\nBy asking one yes/no question, can you determine the road to Freedom?\nWe leave solving this puzzle as an exercise. You can either provide a direct answer and check it,\nor create a search space of abstract syntax, create an interpreter for the syntax and have z3\nsearch for the question."),(0,i.kt)("h3",{id:"patterns"},"Patterns"),(0,i.kt)("p",null,"The Stanford Pascal verifier and the subsequent Simplify theorem prover pioneered the use of pattern-based quantifier instantiation. The basic idea behind pattern-based quantifier instantiation is in a sense straight-forward. Annotate a quantified formula using a ",(0,i.kt)("em",{parentName:"p"},"pattern")," that contains all the bound variables. So a pattern is an expression (that does not contain binding operations, such as quantifiers) that contains variables bound by a quantifier. Then instantiate the quantifier whenever a term that matches the pattern is created during search. This is a conceptually easy starting point, but there are several subtleties that are important."),(0,i.kt)("p",null,"In the following example, the first two options make sure that Model-based quantifier instantiation and saturation engines are disabled. We also annotate the quantified formula with the pattern (f (g x)). Since there is no ground instance of this pattern, the quantifier is not instantiated, and Z3 fails to show that the formula is unsatisfiable."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.auto-config false) ; disable automatic self configuration\n(set-option :smt.mbqi false) ; disable model-based quantifier instantiation\n(declare-fun f (Int) Int)\n(declare-fun g (Int) Int)\n(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (forall ((x Int))\n (! (= (f (g x)) x)\n :pattern ((f (g x))))))\n(assert (= (g a) c))\n(assert (= (g b) c))\n(assert (not (= a b)))\n(check-sat)",result:{output:"unknown\n",error:"",status:"z3-ran",hash:"fa455214b73936f55c70bda6c1092f31d186b494"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"When the more permissive pattern (g x) is used. Z3 proves the formula to be unsatisfiable. More restrictive patterns minimize the number of instantiations (and potentially improve performance), but they may also make Z3 less complete."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.auto-config false) ; disable automatic self configuration\n(set-option :smt.mbqi false) ; disable model-based quantifier instantiation\n(declare-fun f (Int) Int)\n(declare-fun g (Int) Int)\n(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (forall ((x Int))\n (! (= (f (g x)) x)\n :pattern ((g x)))))\n(assert (= (g a) c))\n(assert (= (g b) c))\n(assert (not (= a b)))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"a7a0bb885d583330ec198e7d172476b149371bae"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Some patterns may also create long instantiation chains. Consider the following assertion."),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"(assert (forall (x Type) (y Type)\n(! (= (subtype x y) (subtype (array-of x) (array-of y)))\n:pattern ((subtype x y))\n))")),(0,i.kt)("p",null,"The axiom gets instantiated whenever there is some ground term of the form (subtype s t). The instantiation causes a fresh ground term (subtype (array-of s) (array-of t)), which enables a new instantiation. This undesirable situation is called a matching loop. Z3 uses many heuristics to break matching loops."),(0,i.kt)("p",null,"Before elaborating on the subtleties, we should address an important first question. What defines the terms that are created during search? In the context of most SMT solvers, and of the Simplify theorem prover, terms exist as part of the input formula, they are of course also created by instantiating quantifiers, but terms are also implicitly created when equalities are asserted. The last point means that terms are considered up to congruence and pattern matching takes place modulo ground equalities. We call the matching problem E-matching. For example, if we have the following equalities"),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.auto-config false) ; disable automatic self configuration\n(set-option :smt.mbqi false) ; disable model-based quantifier instantiation\n(declare-fun f (Int) Int)\n(declare-fun g (Int) Int)\n(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (forall ((x Int))\n (! (= (f (g x)) x)\n :pattern ((f (g x))))))\n(assert (= a (g b)))\n(assert (= b c))\n(assert (not (= (f a) c)))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"f2e9b0215ad3baf1ba54d43cb0cadee036e5b560"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The terms (f a) and (f (g b)) are equal modulo the equalities. The pattern (f (g x)) can be matched and x bound to b (and the equality (= (f (g b)) b) is deduced."),(0,i.kt)("p",null,"While E-matching is an NP-complete problem, the main sources of overhead in larger verification problems comes from matching thousands of patterns in the context of an evolving set of terms and equalities. Z3 integrates an efficient E-matching engine using term indexing techniques."),(0,i.kt)("h3",{id:"multi-patterns"},"Multi-patterns"),(0,i.kt)("p",null,"In some cases, there is no pattern that contains all bound variables and does not contain interpreted symbols. In these cases, we use multi-patterns. In the following example, the quantified formula states that f is injective. This quantified formula is annotated with the multi-pattern (f x) (f y)"),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort A)\n(declare-sort B)\n(declare-fun f (A) B)\n(assert (forall ((x A) (y A))\n (! (= (= (f x) (f y)) (= x y))\n :pattern ((f x) (f y))\n )))\n(declare-const a1 A)\n(declare-const a2 A)\n(declare-const b B)\n(assert (not (= a1 a2)))\n(assert (= (f a1) b))\n(assert (= (f a2) b))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"96f3ab86a6eb6a04085b6a97fc57cf321eb0f946"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The quantified formula is instantiated for every pair of occurrences of f. A simple trick allows formulating injectivity of f in such a way that only a linear number of instantiations is required. The trick is to realize that f is injective if and only if it has a partial inverse."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort A)\n(declare-sort B)\n(declare-fun f (A) B)\n(declare-fun f-inv (B) A)\n(assert (forall ((x A))\n (! (= (f-inv (f x)) x)\n :pattern ((f x))\n )))\n(declare-const a1 A)\n(declare-const a2 A)\n(declare-const b B)\n(assert (not (= a1 a2)))\n(assert (= (f a1) b))\n(assert (= (f a2) b))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"57ebf8be33053a4b62d1c6deeb94fac3dc026b0e"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"no-patterns"},"No patterns"),(0,i.kt)("p",null,"The annotation no-pattern can be used to instrument Z3 not to use a certain sub-expression as a pattern. The pattern inference engine may otherwise choose arbitrary sub-expressions as patterns to direct quantifier instantiation."),(0,i.kt)("h3",{id:"model-based-quantifier-instantiation"},"Model-based Quantifier Instantiation"),(0,i.kt)("p",null,"The model-based quantifier instantiation (MBQI) is essentially a counter-example based refinement loop, where candidate models are built and checked. When the model checking step fails, it creates new quantifier instantiations. The models are returned as simple functional programs. In the following example, the model provides an interpretation for function f and constants a and b. One can easily check that the returned model does indeed satisfy the quantifier."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(declare-fun f (Int Int) Int)\n(declare-const a Int)\n(declare-const b Int)\n\n(assert (forall ((x Int)) (= (f x x) (+ x a))))\n\n(assert (< (f a b) a))\n(assert (< a 0))\n(check-sat)\n(get-model)\n\n(echo "evaluating (f (+ a 10) 20)...")\n(eval (f (+ a 10) 20))',result:{output:"sat\n(\n (define-fun b () Int\n 0)\n (define-fun a () Int\n (- 1))\n (define-fun f ((x!0 Int) (x!1 Int)) Int\n (ite (and (= x!0 (- 1)) (= x!1 0)) (- 2)\n (+ (- 1) x!0)))\n)\nevaluating (f (+ a 10) 20)...\n8\n",error:"",status:"z3-ran",hash:"cfa8d4fa9a231af271ed436895d834c5afadeec6"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The command eval evaluates an expression in the last model produced by Z3. It is essentially executing the function program produced by Z3."),(0,i.kt)("p",null,"MBQI is a decision procedure for several useful fragments. It may find models even for formulas that are not in any of these fragments. We describe some of these fragments."),(0,i.kt)("h4",{id:"effectively-propositional"},"Effectively Propositional"),(0,i.kt)("p",null,"The effectively propositional class of formulas (aka The Bernays-Schonfinkel class) is a decidable fragment of first-order logic formulas. It corresponds to formulas which, when written in prenex normal form contain only constants, universal quantifiers, and functions that return Boolean values (aka predicates)."),(0,i.kt)("p",null,"Problems arising from program verification often involve establishing facts of quantifier-free formulas, but the facts themselves use relations and functions that are conveniently axiomatized using a background theory that uses quantified formulas. One set of examples of this situation comprise of formulas involving partial-orders. The following example axiomatizes a subtype partial order relation that has the tree property. That is, if x and y are subtypes of z, then x is a subtype of y or y is a subtype of x. The option (set-option :model.compact true) instructs Z3 to eliminate trivial redundancies from the generated model. In this example, Z3 also creates a finite interpretation for the uninterpreted sort T."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(set-option :model.compact true)\n\n;; T is an uninterpreted sort\n(declare-sort T) \n\n(declare-fun subtype (T T) Bool)\n\n;; subtype is reflexive\n(assert (forall ((x T)) (subtype x x)))\n\n;; subtype is antisymmetric\n(assert (forall ((x T) (y T)) (=> (and (subtype x y)\n (subtype y x))\n (= x y))))\n;; subtype is transitive\n(assert (forall ((x T) (y T) (z T)) (=> (and (subtype x y)\n (subtype y z))\n (subtype x z))))\n;; subtype has the tree-property\n(assert (forall ((x T) (y T) (z T)) (=> (and (subtype x z)\n (subtype y z))\n (or (subtype x y)\n (subtype y x)))))\n\n;; now we define a simple example using the axiomatization above.\n(declare-const obj-type T)\n(declare-const int-type T)\n(declare-const real-type T)\n(declare-const complex-type T)\n(declare-const string-type T)\n\n;; we have an additional axiom: every type is a subtype of obj-type\n(assert (forall ((x T)) (subtype x obj-type)))\n\n(assert (subtype int-type real-type))\n(assert (subtype real-type complex-type))\n(assert (not (subtype string-type real-type)))\n(declare-const root-type T)\n(assert (subtype obj-type root-type))\n(check-sat)\n(get-model)\n\n(echo "Is int-type a subtype of complex-type?")\n(eval (subtype int-type complex-type))\n(echo "Is int-type = obj-type?")\n(eval (= int-type obj-type))\n(echo "Is int-type a subtype of root-type?")\n(eval (subtype int-type root-type))\n(echo "Is root-type = obj-type?")\n(eval (= root-type obj-type))',result:{output:"sat\n(\n ;; universe for T:\n ;; T!val!3 T!val!4 T!val!0 T!val!2 T!val!1 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun T!val!3 () T)\n (declare-fun T!val!4 () T)\n (declare-fun T!val!0 () T)\n (declare-fun T!val!2 () T)\n (declare-fun T!val!1 () T)\n ;; cardinality constraint:\n (forall ((x T))\n (or (= x T!val!3)\n (= x T!val!4)\n (= x T!val!0)\n (= x T!val!2)\n (= x T!val!1)))\n ;; -----------\n (define-fun string-type () T\n T!val!3)\n (define-fun int-type () T\n T!val!0)\n (define-fun complex-type () T\n T!val!2)\n (define-fun real-type () T\n T!val!1)\n (define-fun obj-type () T\n T!val!4)\n (define-fun root-type () T\n T!val!4)\n (define-fun subtype ((x!0 T) (x!1 T)) Bool\n (or (and (= x!0 T!val!2)\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (not (= x!1 T!val!0))\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!2)\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!2)\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!1)\n (not (= x!0 T!val!4))\n (not (= x!1 T!val!0))\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (not (= x!1 T!val!0))\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!0)\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (not (= x!0 T!val!0))\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (not (= x!1 T!val!0))\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (not (= x!0 T!val!0))\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!4))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!4))\n (and (= x!0 T!val!1)\n (not (= x!0 T!val!4))\n (= x!1 T!val!2)\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!1)\n (not (= x!0 T!val!4))\n (= x!1 T!val!1)\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!2)\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!1) (not (= x!0 T!val!4)) (= x!1 T!val!4))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!1)\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!2)\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!4))\n (and (= x!0 T!val!4) (= x!1 T!val!4))))\n)\nIs int-type a subtype of complex-type?\ntrue\nIs int-type = obj-type?\nfalse\nIs int-type a subtype of root-type?\ntrue\nIs root-type = obj-type?\ntrue\n",error:"",status:"z3-ran",hash:"0cfbe9c30c719a221b90b1a187197d3f001653fc"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Note that it uses two auxiliary functions (subtype!25 and k!24) that were not part of your formula. They are auxiliary definitions created by Z3 during the model construction procedure. We can also ask questions by using the eval command. For example,"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"(eval (subtype int-type complex-type))")),(0,i.kt)("p",null,"executes (evaluates) the given expression using the produced functional program (model)."),(0,i.kt)("p",null,"Constraints over sets (Boolean Algebras) can be encoded into this fragment by treating sets as unary predicates and lifting equalities between sets as formula equivalence."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(set-option :model.compact true)\n\n;; A, B, C and D are sets of Int\n(declare-fun A (Int) Bool)\n(declare-fun B (Int) Bool)\n(declare-fun C (Int) Bool)\n(declare-fun D (Int) Bool)\n\n;; A union B is a subset of C\n(assert (forall ((x Int)) (=> (or (A x) (B x)) (C x))))\n\n;; B minus A is not empty\n;; That is, there exists an integer e that is B but not in A\n(declare-const e Int)\n(assert (and (B e) (not (A e))))\n\n;; D is equal to C\n(assert (forall ((x Int)) (iff (D x) (C x))))\n\n;; 0, 1 and 2 are in B\n(assert (B 0))\n(assert (B 1))\n(assert (B 2))\n\n(check-sat)\n(get-model)\n(echo "Is e an element of D?")\n(eval (D e))\n\n(echo "Now proving that A is a strict subset of D")\n;; This is true if the negation is unsatisfiable\n(push)\n(assert (not (and \n ;; A is a subset of D\n (forall ((x Int)) (=> (A x) (D x)))\n ;; but, D has an element that is not in A.\n (exists ((x Int)) (and (D x) (not (A x)))))))\n(check-sat)\n(pop)',result:{output:"sat\n(\n (define-fun e () Int\n 3)\n (define-fun B ((x!0 Int)) Bool\n (or (and (not (= x!0 1)) (not (= x!0 3)) (not (= x!0 0)))\n (and (not (= x!0 1)) (= x!0 3))\n (and (not (= x!0 1)) (not (= x!0 3)) (= x!0 0))\n (= x!0 1)))\n (define-fun A ((x!0 Int)) Bool\n false)\n (define-fun C ((x!0 Int)) Bool\n (or (and (not (= x!0 1)) (not (= x!0 3)) (not (= x!0 0)))\n (and (not (= x!0 1)) (= x!0 3))\n (and (not (= x!0 1)) (not (= x!0 3)) (= x!0 0))\n (= x!0 1)))\n (define-fun D ((x!0 Int)) Bool\n (ite (= x!0 3) true\n (ite (= x!0 0) true\n (ite (= x!0 1) true\n (ite (= x!0 2) true\n (C x!0))))))\n)\nIs e an element of D?\ntrue\nNow proving that A is a strict subset of D\nunsat\n",error:"",status:"z3-ran",hash:"65178e72c68ccb235b1b0d9f4692596621098676"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"stratified-sorts-fragment"},"Stratified Sorts Fragment"),(0,i.kt)("p",null,"The stratified sorts fragment is another decidable fragment of many sorted first-order logic formulas. It corresponds to formulas which, when written in prenex normal form, there is a function level from sorts to naturals, and for every function"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"declare-fun f (S_1 ... S_n) R)"),(0,i.kt)("p",{parentName:"blockquote"},"level(R) level(S_i).")),(0,i.kt)("h4",{id:"array-property-fragment"},"Array Property Fragment"),(0,i.kt)("p",null,"The array property fragment can encode properties about uni-dimensional, and is strong enough to say an array is sorted. More information about this fragment can be found in the paper ",(0,i.kt)("a",{parentName:"p",href:"https://theory.stanford.edu/~arbrad/papers/arrays.pdf"},"What's Decidable About Arrays"),"."),(0,i.kt)("p",null,"(set-option :smt.mbqi true)\n(set-option :model.compact true)"),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(set-option :model.compact true)\n\n;; A0, A1, A2, A3, A4 are "arrays" from Integers to Integers.\n(declare-fun A0 (Int) Int) (declare-fun A1 (Int) Int)\n(declare-fun A2 (Int) Int) (declare-fun A3 (Int) Int)\n(declare-fun A4 (Int) Int) \n(declare-const n Int) (declare-const l Int)\n(declare-const k Int) (declare-const x Int)\n(declare-const y Int) (declare-const w Int)\n(declare-const z Int)\n\n;; A1 = A0[k <- w]\n(assert (= (A1 k) w))\n(assert (forall ((x Int)) (or (= x k) (= (A1 x) (A0 x)))))\n\n;; A2 = A1[l <- x] = A0[k <- w][l <- x]\n(assert (= (A2 l) x))\n(assert (forall ((x Int)) (or (= x l) (= (A2 x) (A1 x)))))\n\n;; A3 = A0[k <- y]\n(assert (= (A3 k) y))\n(assert (forall ((x Int)) (or (= x k) (= (A3 x) (A0 x)))))\n\n;; A4 = A3[l <- z] = A0[k <- y][l <- z] \n(assert (= (A3 l) z))\n(assert (forall ((x Int)) (or (= x l) (= (A4 x) (A3 x)))))\n\n(assert (and (< w x) (< x y) (< y z)))\n(assert (and (< 0 k) (< k l) (< l n)))\n(assert (> (- l k) 1))\n\n;; A2 is sorted in the interval [0,n-1]\n(assert (forall ((i Int) (j Int))\n (=> (and (<= 0 i) (<= i j) (<= j (- n 1)))\n (<= (A2 i) (A2 j)))))\n\n(check-sat)\n(get-model)\n\n;; A4 is sorted in the interval [0,n-1]\n(assert (forall ((i Int) (j Int))\n (=> (and (<= 0 i) (<= i j) (<= j (- n 1)))\n (<= (A4 i) (A4 j)))))\n\n(check-sat)',result:{output:"sat\n(\n (define-fun k () Int\n 1)\n (define-fun l () Int\n 3)\n (define-fun n () Int\n 4)\n (define-fun y () Int\n 0)\n (define-fun z () Int\n 1)\n (define-fun w () Int\n (- 2))\n (define-fun x () Int\n (- 1))\n (define-fun A2 ((x!0 Int)) Int\n (let ((a!1 (ite (and (<= 1 x!0) (not (<= 3 x!0)))\n (- 2)\n (ite (and (<= 1 x!0) (<= 3 x!0)) (- 1) 11))))\n (ite (<= 1 x!0) a!1 (- 2))))\n (define-fun A1 ((x!0 Int)) Int\n (ite (= x!0 1) (- 2)\n (ite (= x!0 3) 1\n (ite (= x!0 0) (- 2)\n (A2 x!0)))))\n (define-fun A0 ((x!0 Int)) Int\n (ite (= x!0 3) 1\n (ite (= x!0 0) (- 2)\n (A1 x!0))))\n (define-fun A3 ((x!0 Int)) Int\n (ite (= x!0 1) 0\n (ite (= x!0 3) 1\n (ite (= x!0 0) (- 2)\n (A0 x!0)))))\n (define-fun A4 ((x!0 Int)) Int\n (ite (= x!0 1) 0\n (ite (= x!0 0) (- 2)\n (A3 x!0))))\n)\nunsat\n",error:"",status:"z3-ran",hash:"768568e738d0fc8f00dd1f561fc18e59d76f035a"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"list-fragment"},"List Fragment"),(0,i.kt)("p",null,"The list fragment can encode properties about data-structures such as lists. For each quantified axiom q in this fragment, there is an easy way to satisfy q. More information about this fragment can be found in the paper ",(0,i.kt)("a",{parentName:"p",href:"https://people.eecs.berkeley.edu/~necula/Papers/verifier-cav05.pdf"},"Data Structure Specifications via Local Equality Axioms"),"."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n;; Ptr is the pointer sort.\n(declare-sort Ptr)\n;; (next p) represents p.next\n;; The pointer reached by following the field next of p.\n(declare-fun next (Ptr) Ptr)\n(declare-fun prev (Ptr) Ptr)\n(declare-fun state (Ptr) Int)\n(declare-fun prio (Ptr) Int)\n(declare-const null Ptr)\n(declare-const RUN Int)\n(declare-const SLP Int)\n(assert (distinct RUN SLP))\n\n;; Asserting data-structure invariants in the current state.\n\n;; p != null && p.next != null = p.next.prev = p\n(assert (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (next p) null)))\n (= (prev (next p)) p))))\n\n;; p != null && p.prev != null = p.prev.next = p\n(assert (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (prev p) null)))\n (= (next (prev p)) p))))\n\n;; p != null && p.prev != null = p.state = p.next.state\n(assert (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (next p) null)))\n (= (state p) (state (next p))))))\n\n;; p != null && p.prev != null && p.state = RUN = p.prio = p.next.prio\n(assert (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (next p) null))\n (= (state p) RUN))\n (= (prio p) (prio (next p))))))\n\n;; Verifying Verification Conditions (VCs) for remove procdure\n(declare-const x Ptr)\n;; new-state, new-next, new-prev and new-prio represent the state \n;; of the system after executing the remove procedure.\n(declare-fun new-state (Ptr) Int)\n(declare-fun new-next (Ptr) Ptr)\n(declare-fun new-prev (Ptr) Ptr)\n(declare-fun new-prio (Ptr) Int)\n;; pre-conditions\n(assert (not (= x null)))\n(assert (not (= (prev x) null)))\n(assert (= (state x) RUN))\n;; updates\n;; --- new-prev = prev\n(assert (forall ((p Ptr)) (= (new-prev p) (prev p))))\n;; --- new-prio = prio\n(assert (forall ((p Ptr)) (= (new-prio p) (prio p))))\n;; --- new-state = state[x - SLP]\n(assert (= (new-state x) SLP))\n(assert (forall ((p Ptr)) (or (= p x) (= (new-state p) (state p)))))\n;; ----\n;; --- new-next = next[(prev x) - (next x); x - null]\n(assert (= (new-next x) null))\n(assert (= (new-next (prev x)) (next x)))\n(assert (forall ((p Ptr)) (or (= p x) (= p (prev x)) (= (new-next p) (next p)))))\n;; ---\n\n;; Proving the data-structure invariants in the new state.\n\n(push)\n(assert (not (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (new-next p) null)))\n (= (new-prev (new-next p)) p)))))\n(check-sat)\n(get-model)\n(pop)\n(echo "Why it is not valid")\n(echo "Trying again using a fresh constant bad-ptr as an witness for the failure...")\n(push)\n(declare-const bad-ptr Ptr)\n(assert (not (= (and (not (= bad-ptr null))\n (not (= (new-next bad-ptr) null)))\n (= (new-prev (new-next bad-ptr)) bad-ptr))))\n(check-sat)\n(get-model)\n(echo "null is")\n(eval null)\n(echo "bad-ptr is")\n(eval bad-ptr)\n(echo "In the new state, bad-ptr.next is")\n(eval (new-next bad-ptr))\n(echo "In the new state, bad-ptr.next.prev is")\n(eval (new-prev (new-next bad-ptr)))\n(pop)',result:{output:"sat\n(\n ;; universe for Ptr:\n ;; Ptr!val!3 Ptr!val!6 Ptr!val!2 Ptr!val!0 Ptr!val!8 Ptr!val!9 Ptr!val!10 Ptr!val!11 Ptr!val!12 Ptr!val!7 Ptr!val!5 Ptr!val!1 Ptr!val!4 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Ptr!val!3 () Ptr)\n (declare-fun Ptr!val!6 () Ptr)\n (declare-fun Ptr!val!2 () Ptr)\n (declare-fun Ptr!val!0 () Ptr)\n (declare-fun Ptr!val!8 () Ptr)\n (declare-fun Ptr!val!9 () Ptr)\n (declare-fun Ptr!val!10 () Ptr)\n (declare-fun Ptr!val!11 () Ptr)\n (declare-fun Ptr!val!12 () Ptr)\n (declare-fun Ptr!val!7 () Ptr)\n (declare-fun Ptr!val!5 () Ptr)\n (declare-fun Ptr!val!1 () Ptr)\n (declare-fun Ptr!val!4 () Ptr)\n ;; cardinality constraint:\n (forall ((x Ptr))\n (or (= x Ptr!val!3)\n (= x Ptr!val!6)\n (= x Ptr!val!2)\n (= x Ptr!val!0)\n (= x Ptr!val!8)\n (= x Ptr!val!9)\n (= x Ptr!val!10)\n (= x Ptr!val!11)\n (= x Ptr!val!12)\n (= x Ptr!val!7)\n (= x Ptr!val!5)\n (= x Ptr!val!1)\n (= x Ptr!val!4)))\n ;; -----------\n (define-fun SLP () Int\n 3)\n (define-fun null () Ptr\n Ptr!val!1)\n (define-fun x () Ptr\n Ptr!val!0)\n (define-fun RUN () Int\n 2)\n (define-fun prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!8) Ptr!val!7\n (let ((a!1 (or (= x!0 Ptr!val!11)\n (and (= x!0 Ptr!val!12)\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11)))))\n (a!2 (ite (and (= x!0 Ptr!val!0)\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!1))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!2\n Ptr!val!6)))\n (let ((a!3 (ite (and (not (= x!0 Ptr!val!4))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!1))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!0\n a!2)))\n (let ((a!4 (ite (and (= x!0 Ptr!val!4)\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!1))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!3\n a!3)))\n (let ((a!5 (ite (and (= x!0 Ptr!val!5)\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!4\n a!4)))\n (let ((a!6 (ite (and (= x!0 Ptr!val!6)\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!9\n a!5)))\n (let ((a!7 (ite (and (= x!0 Ptr!val!2)\n (not (= x!0 Ptr!val!1))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!10\n a!6)))\n (let ((a!8 (ite (and (= x!0 Ptr!val!9)\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!11\n a!7)))\n (let ((a!9 (ite (and (= x!0 Ptr!val!10)\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!12\n a!8)))\n (ite (and a!1 (not (= x!0 Ptr!val!8))) Ptr!val!1 a!9)))))))))))\n (define-fun k!57 ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!4) Ptr!val!4\n (ite (= x!0 Ptr!val!0) Ptr!val!0\n (ite (= x!0 Ptr!val!2) Ptr!val!2\n (ite (= x!0 Ptr!val!1) Ptr!val!1\n (ite (= x!0 Ptr!val!5) Ptr!val!5\n (ite (= x!0 Ptr!val!12) Ptr!val!12\n (ite (= x!0 Ptr!val!6) Ptr!val!6\n (ite (= x!0 Ptr!val!7) Ptr!val!7\n (ite (= x!0 Ptr!val!10) Ptr!val!10\n (ite (= x!0 Ptr!val!9) Ptr!val!9\n (ite (= x!0 Ptr!val!11) Ptr!val!11\n (ite (= x!0 Ptr!val!8) Ptr!val!8\n Ptr!val!3)))))))))))))\n (define-fun next ((x!0 Ptr)) Ptr\n (let ((a!1 (ite (= (k!57 x!0) Ptr!val!3)\n Ptr!val!4\n (ite (= (k!57 x!0) Ptr!val!2) Ptr!val!0 Ptr!val!3))))\n (let ((a!2 (ite (= (k!57 x!0) Ptr!val!5)\n Ptr!val!1\n (ite (= (k!57 x!0) Ptr!val!4) Ptr!val!5 a!1))))\n (let ((a!3 (ite (= (k!57 x!0) Ptr!val!1)\n Ptr!val!0\n (ite (= (k!57 x!0) Ptr!val!6) Ptr!val!7 a!2))))\n (let ((a!4 (ite (= (k!57 x!0) Ptr!val!8)\n Ptr!val!1\n (ite (= (k!57 x!0) Ptr!val!7) Ptr!val!8 a!3))))\n (let ((a!5 (ite (= (k!57 x!0) Ptr!val!10)\n Ptr!val!2\n (ite (= (k!57 x!0) Ptr!val!9) Ptr!val!6 a!4))))\n (ite (= (k!57 x!0) Ptr!val!12)\n Ptr!val!10\n (ite (= (k!57 x!0) Ptr!val!11) Ptr!val!9 a!5))))))))\n (define-fun new-prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!3) Ptr!val!0\n (ite (= x!0 Ptr!val!4) Ptr!val!3\n (ite (= x!0 Ptr!val!5) Ptr!val!4\n (ite (= x!0 Ptr!val!1) Ptr!val!6\n (ite (= x!0 Ptr!val!7) Ptr!val!6\n (ite (= x!0 Ptr!val!6) Ptr!val!9\n (ite (= x!0 Ptr!val!2) Ptr!val!10\n (ite (= x!0 Ptr!val!9) Ptr!val!11\n (ite (= x!0 Ptr!val!10) Ptr!val!12\n (ite (= x!0 Ptr!val!12) Ptr!val!1\n (ite (= x!0 Ptr!val!11) Ptr!val!1\n (ite (= x!0 Ptr!val!8) Ptr!val!7\n (prev x!0)))))))))))))))\n (define-fun prio ((x!0 Ptr)) Int\n (let ((a!1 (ite (or (= (k!57 x!0) Ptr!val!3)\n (= (k!57 x!0) Ptr!val!2)\n (= (k!57 x!0) Ptr!val!4)\n (= (k!57 x!0) Ptr!val!0)\n (= (k!57 x!0) Ptr!val!5))\n 4\n 13)))\n (let ((a!2 (ite (= (k!57 x!0) Ptr!val!6)\n 7\n (ite (= (k!57 x!0) Ptr!val!1) 5 a!1))))\n (let ((a!3 (ite (= (k!57 x!0) Ptr!val!8)\n 9\n (ite (= (k!57 x!0) Ptr!val!7) 8 a!2))))\n (let ((a!4 (ite (= (k!57 x!0) Ptr!val!10)\n 4\n (ite (= (k!57 x!0) Ptr!val!9) 10 a!3))))\n (ite (= (k!57 x!0) Ptr!val!12) 4 (ite (= (k!57 x!0) Ptr!val!11) 12 a!4)))))))\n (define-fun state ((x!0 Ptr)) Int\n (let ((a!1 (ite (or (= (k!57 x!0) Ptr!val!3)\n (= (k!57 x!0) Ptr!val!2)\n (= (k!57 x!0) Ptr!val!4)\n (= (k!57 x!0) Ptr!val!0)\n (= (k!57 x!0) Ptr!val!5))\n 2\n 14)))\n (let ((a!2 (ite (or (= (k!57 x!0) Ptr!val!8)\n (= (k!57 x!0) Ptr!val!6)\n (= (k!57 x!0) Ptr!val!9)\n (= (k!57 x!0) Ptr!val!7))\n 11\n (ite (= (k!57 x!0) Ptr!val!1) 6 a!1))))\n (let ((a!3 (ite (= (k!57 x!0) Ptr!val!11)\n 11\n (ite (= (k!57 x!0) Ptr!val!10) 2 a!2))))\n (ite (= (k!57 x!0) Ptr!val!12) 2 a!3)))))\n (define-fun new-next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!1\n (ite (= x!0 Ptr!val!2) Ptr!val!3\n (ite (= x!0 Ptr!val!3) Ptr!val!4\n (ite (= x!0 Ptr!val!4) Ptr!val!5\n (ite (= x!0 Ptr!val!5) Ptr!val!1\n (ite (= x!0 Ptr!val!6) Ptr!val!7\n (ite (= x!0 Ptr!val!1) Ptr!val!0\n (ite (= x!0 Ptr!val!9) Ptr!val!6\n (ite (= x!0 Ptr!val!10) Ptr!val!2\n (ite (= x!0 Ptr!val!11) Ptr!val!9\n (ite (= x!0 Ptr!val!12) Ptr!val!10\n (ite (= x!0 Ptr!val!7) Ptr!val!8\n (ite (= x!0 Ptr!val!8) Ptr!val!1\n (next x!0)))))))))))))))\n (define-fun new-prio ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!3) 4\n (ite (= x!0 Ptr!val!0) 4\n (ite (= x!0 Ptr!val!4) 4\n (ite (= x!0 Ptr!val!2) 4\n (ite (= x!0 Ptr!val!5) 4\n (ite (= x!0 Ptr!val!1) 5\n (ite (= x!0 Ptr!val!7) 8\n (ite (= x!0 Ptr!val!6) 7\n (ite (= x!0 Ptr!val!9) 10\n (ite (= x!0 Ptr!val!10) 4\n (ite (= x!0 Ptr!val!12) 4\n (ite (= x!0 Ptr!val!8) 9\n (ite (= x!0 Ptr!val!11) 12\n (prio x!0)))))))))))))))\n (define-fun new-state ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!0) 3\n (ite (= x!0 Ptr!val!3) 2\n (ite (= x!0 Ptr!val!2) 2\n (ite (= x!0 Ptr!val!4) 2\n (ite (= x!0 Ptr!val!5) 2\n (ite (= x!0 Ptr!val!1) 6\n (ite (= x!0 Ptr!val!7) 11\n (ite (= x!0 Ptr!val!6) 11\n (ite (= x!0 Ptr!val!9) 11\n (ite (= x!0 Ptr!val!10) 2\n (ite (= x!0 Ptr!val!12) 2\n (ite (= x!0 Ptr!val!11) 11\n (ite (= x!0 Ptr!val!8) 11\n (state x!0)))))))))))))))\n)\nWhy it is not valid\nTrying again using a fresh constant bad-ptr as an witness for the failure...\nsat\n(\n ;; universe for Ptr:\n ;; Ptr!val!3 Ptr!val!6 Ptr!val!2 Ptr!val!0 Ptr!val!8 Ptr!val!9 Ptr!val!10 Ptr!val!11 Ptr!val!12 Ptr!val!7 Ptr!val!5 Ptr!val!1 Ptr!val!4 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Ptr!val!3 () Ptr)\n (declare-fun Ptr!val!6 () Ptr)\n (declare-fun Ptr!val!2 () Ptr)\n (declare-fun Ptr!val!0 () Ptr)\n (declare-fun Ptr!val!8 () Ptr)\n (declare-fun Ptr!val!9 () Ptr)\n (declare-fun Ptr!val!10 () Ptr)\n (declare-fun Ptr!val!11 () Ptr)\n (declare-fun Ptr!val!12 () Ptr)\n (declare-fun Ptr!val!7 () Ptr)\n (declare-fun Ptr!val!5 () Ptr)\n (declare-fun Ptr!val!1 () Ptr)\n (declare-fun Ptr!val!4 () Ptr)\n ;; cardinality constraint:\n (forall ((x Ptr))\n (or (= x Ptr!val!3)\n (= x Ptr!val!6)\n (= x Ptr!val!2)\n (= x Ptr!val!0)\n (= x Ptr!val!8)\n (= x Ptr!val!9)\n (= x Ptr!val!10)\n (= x Ptr!val!11)\n (= x Ptr!val!12)\n (= x Ptr!val!7)\n (= x Ptr!val!5)\n (= x Ptr!val!1)\n (= x Ptr!val!4)))\n ;; -----------\n (define-fun bad-ptr () Ptr\n Ptr!val!0)\n (define-fun SLP () Int\n 4)\n (define-fun x () Ptr\n Ptr!val!2)\n (define-fun RUN () Int\n 3)\n (define-fun null () Ptr\n Ptr!val!3)\n (define-fun prev ((x!0 Ptr)) Ptr\n (let ((a!1 (or (= x!0 Ptr!val!7)\n (and (= x!0 Ptr!val!3)\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7)))))\n (a!2 (ite (and (= x!0 Ptr!val!2)\n (not (= x!0 Ptr!val!3))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!0\n Ptr!val!9)))\n (let ((a!3 (ite (and (not (= x!0 Ptr!val!4))\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!3))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!2\n a!2)))\n (let ((a!4 (ite (and (= x!0 Ptr!val!4)\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!3))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!1\n a!3)))\n (let ((a!5 (ite (and (= x!0 Ptr!val!5)\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!4\n a!4)))\n (let ((a!6 (ite (and a!1\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0)))\n Ptr!val!6\n a!5)))\n (let ((a!7 (ite (and (= x!0 Ptr!val!8)\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!7\n a!6)))\n (let ((a!8 (ite (and (= x!0 Ptr!val!6)\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!10\n (ite (= x!0 Ptr!val!9) Ptr!val!8 a!7))))\n (let ((a!9 (ite (and (= x!0 Ptr!val!0)\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!3\n a!8)))\n (let ((a!10 (ite (and (= x!0 Ptr!val!10)\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!11\n a!9)))\n (let ((a!11 (ite (and (= x!0 Ptr!val!11)\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!12\n a!10)))\n (ite (and (= x!0 Ptr!val!12) (not (= x!0 Ptr!val!9))) Ptr!val!3 a!11))))))))))))\n (define-fun k!141 ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!4) Ptr!val!4\n (ite (= x!0 Ptr!val!2) Ptr!val!2\n (ite (= x!0 Ptr!val!3) Ptr!val!3\n (ite (= x!0 Ptr!val!5) Ptr!val!5\n (ite (= x!0 Ptr!val!6) Ptr!val!6\n (ite (= x!0 Ptr!val!7) Ptr!val!7\n (ite (= x!0 Ptr!val!8) Ptr!val!8\n (ite (= x!0 Ptr!val!0) Ptr!val!0\n (ite (= x!0 Ptr!val!10) Ptr!val!10\n (ite (= x!0 Ptr!val!11) Ptr!val!11\n (ite (= x!0 Ptr!val!12) Ptr!val!12\n (ite (= x!0 Ptr!val!9) Ptr!val!9\n Ptr!val!1)))))))))))))\n (define-fun next ((x!0 Ptr)) Ptr\n (let ((a!1 (ite (= (k!141 x!0) Ptr!val!2)\n Ptr!val!1\n (ite (= (k!141 x!0) Ptr!val!0) Ptr!val!2 Ptr!val!11))))\n (let ((a!2 (ite (= (k!141 x!0) Ptr!val!4)\n Ptr!val!5\n (ite (= (k!141 x!0) Ptr!val!1) Ptr!val!4 a!1))))\n (let ((a!3 (ite (= (k!141 x!0) Ptr!val!3)\n Ptr!val!2\n (ite (= (k!141 x!0) Ptr!val!5) Ptr!val!3 a!2))))\n (let ((a!4 (ite (= (k!141 x!0) Ptr!val!7)\n Ptr!val!8\n (ite (= (k!141 x!0) Ptr!val!6) Ptr!val!7 a!3))))\n (let ((a!5 (ite (= (k!141 x!0) Ptr!val!9)\n Ptr!val!3\n (ite (= (k!141 x!0) Ptr!val!8) Ptr!val!9 a!4))))\n (ite (= (k!141 x!0) Ptr!val!11)\n Ptr!val!10\n (ite (= (k!141 x!0) Ptr!val!10) Ptr!val!6 a!5))))))))\n (define-fun new-prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n (ite (= x!0 Ptr!val!1) Ptr!val!2\n (ite (= x!0 Ptr!val!4) Ptr!val!1\n (ite (= x!0 Ptr!val!5) Ptr!val!4\n (ite (= x!0 Ptr!val!3) Ptr!val!6\n (ite (= x!0 Ptr!val!7) Ptr!val!6\n (ite (= x!0 Ptr!val!6) Ptr!val!10\n (ite (= x!0 Ptr!val!0) Ptr!val!3\n (ite (= x!0 Ptr!val!10) Ptr!val!11\n (ite (= x!0 Ptr!val!11) Ptr!val!12\n (ite (= x!0 Ptr!val!8) Ptr!val!7\n (ite (= x!0 Ptr!val!12) Ptr!val!3\n (ite (= x!0 Ptr!val!9) Ptr!val!8\n (prev x!0)))))))))))))))\n (define-fun prio ((x!0 Ptr)) Int\n (let ((a!1 (ite (or (= (k!141 x!0) Ptr!val!4)\n (= (k!141 x!0) Ptr!val!0)\n (= (k!141 x!0) Ptr!val!2)\n (= (k!141 x!0) Ptr!val!5)\n (= (k!141 x!0) Ptr!val!1))\n 2\n 15)))\n (let ((a!2 (ite (= (k!141 x!0) Ptr!val!6)\n 7\n (ite (= (k!141 x!0) Ptr!val!3) 6 a!1))))\n (let ((a!3 (ite (= (k!141 x!0) Ptr!val!8)\n 9\n (ite (= (k!141 x!0) Ptr!val!7) 8 a!2))))\n (let ((a!4 (ite (= (k!141 x!0) Ptr!val!11)\n 12\n (ite (= (k!141 x!0) Ptr!val!10) 11 a!3))))\n (ite (= (k!141 x!0) Ptr!val!9) 14 (ite (= (k!141 x!0) Ptr!val!12) 13 a!4)))))))\n (define-fun new-next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!1\n (ite (= x!0 Ptr!val!2) Ptr!val!3\n (ite (= x!0 Ptr!val!1) Ptr!val!4\n (ite (= x!0 Ptr!val!4) Ptr!val!5\n (ite (= x!0 Ptr!val!6) Ptr!val!7\n (ite (= x!0 Ptr!val!5) Ptr!val!3\n (ite (= x!0 Ptr!val!3) Ptr!val!2\n (ite (= x!0 Ptr!val!10) Ptr!val!6\n (ite (= x!0 Ptr!val!11) Ptr!val!10\n (ite (= x!0 Ptr!val!7) Ptr!val!8\n (ite (= x!0 Ptr!val!12) Ptr!val!11\n (ite (= x!0 Ptr!val!9) Ptr!val!3\n (ite (= x!0 Ptr!val!8) Ptr!val!9\n (next x!0)))))))))))))))\n (define-fun state ((x!0 Ptr)) Int\n (let ((a!1 (ite (or (= (k!141 x!0) Ptr!val!4)\n (= (k!141 x!0) Ptr!val!0)\n (= (k!141 x!0) Ptr!val!2)\n (= (k!141 x!0) Ptr!val!5)\n (= (k!141 x!0) Ptr!val!1))\n 3\n 16)))\n (ite (or (= (k!141 x!0) Ptr!val!11)\n (= (k!141 x!0) Ptr!val!10)\n (= (k!141 x!0) Ptr!val!12)\n (= (k!141 x!0) Ptr!val!8)\n (= (k!141 x!0) Ptr!val!7)\n (= (k!141 x!0) Ptr!val!9)\n (= (k!141 x!0) Ptr!val!6))\n 10\n (ite (= (k!141 x!0) Ptr!val!3) 5 a!1))))\n (define-fun new-prio ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!1) 2\n (ite (= x!0 Ptr!val!0) 2\n (ite (= x!0 Ptr!val!2) 2\n (ite (= x!0 Ptr!val!4) 2\n (ite (= x!0 Ptr!val!5) 2\n (ite (= x!0 Ptr!val!3) 6\n (ite (= x!0 Ptr!val!7) 8\n (ite (= x!0 Ptr!val!6) 7\n (ite (= x!0 Ptr!val!10) 11\n (ite (= x!0 Ptr!val!8) 9\n (ite (= x!0 Ptr!val!11) 12\n (ite (= x!0 Ptr!val!12) 13\n (ite (= x!0 Ptr!val!9) 14\n (prio x!0)))))))))))))))\n (define-fun new-state ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!1) 3\n (ite (= x!0 Ptr!val!0) 3\n (ite (= x!0 Ptr!val!2) 4\n (ite (= x!0 Ptr!val!4) 3\n (ite (= x!0 Ptr!val!5) 3\n (ite (= x!0 Ptr!val!3) 5\n (ite (= x!0 Ptr!val!7) 10\n (ite (= x!0 Ptr!val!6) 10\n (ite (= x!0 Ptr!val!10) 10\n (ite (= x!0 Ptr!val!11) 10\n (ite (= x!0 Ptr!val!8) 10\n (ite (= x!0 Ptr!val!12) 10\n (ite (= x!0 Ptr!val!9) 10\n (state x!0)))))))))))))))\n)\nnull is\nPtr!val!3\nbad-ptr is\nPtr!val!0\nIn the new state, bad-ptr.next is\nPtr!val!1\nIn the new state, bad-ptr.next.prev is\nPtr!val!2\n",error:"",status:"z3-ran",hash:"4474ee17846d7072cc90f8ea99b49fe4b8b03fe7"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"essentially-almost-uninterpreted-fragment"},"Essentially (Almost) Uninterpreted Fragment"),(0,i.kt)("p",null,"The essentially almost uninterpreted fragment subsumes the previous fragments, and uses a more relaxed notion of stratification. More information about this fragment can be found in the paper ",(0,i.kt)("a",{parentName:"p",href:"https://leodemoura.github.io/files/ci.pdf"},"Complete instantiation for quantified formulas in Satisfiability Modulo Theories.")," The model based quantifier instantiation approach used in Z3 is also described in this paper. Stratified data-structures (such as arrays of pointers) can be encoded in this fragment."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n;; Ptr is the pointer sort.\n(declare-sort Ptr)\n;; (next p) represents p.next\n;; The pointer reached by following the field "next" of p.\n(declare-fun next (Ptr) Ptr)\n(declare-fun prev (Ptr) Ptr)\n(declare-fun state (Ptr) Int)\n(declare-fun prio (Ptr) Int)\n(declare-const null Ptr)\n(declare-const RUN Int)\n(declare-const SLP Int)\n(assert (distinct RUN SLP))\n\n;; Asserting data-structure invariants in the current state.\n\n;; p != null && p.next != null => p.next.prev = p\n(assert (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (next p) null)))\n (= (prev (next p)) p))))\n\n;; p != null && p.prev != null => p.prev.next = p\n(assert (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (prev p) null)))\n (= (next (prev p)) p))))\n\n;; p != null && p.prev != null => p.state = p.next.state\n(assert (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (next p) null)))\n (= (state p) (state (next p))))))\n\n;; p != null && p.prev != null && p.state = RUN => p.prio >= p.next.prio\n(assert (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (next p) null))\n (= (state p) RUN))\n (>= (prio p) (prio (next p))))))\n\n;; Verifying Verification Conditions (VCs) for remove procdure\n(declare-const x Ptr)\n;; new-state, new-next, new-prev and new-prio represent the state \n;; of the system after executing the remove procedure.\n(declare-fun new-state (Ptr) Int)\n(declare-fun new-next (Ptr) Ptr)\n(declare-fun new-prev (Ptr) Ptr)\n(declare-fun new-prio (Ptr) Int)\n;; pre-conditions\n(assert (not (= x null)))\n(assert (not (= (prev x) null)))\n(assert (= (state x) RUN))\n;; updates\n;; --- new-prev = prev\n(assert (forall ((p Ptr)) (= (new-prev p) (prev p))))\n;; --- new-prio = prio\n(assert (forall ((p Ptr)) (= (new-prio p) (prio p))))\n;; --- new-state = state[x -> SLP]\n(assert (= (new-state x) SLP))\n(assert (forall ((p Ptr)) (or (= p x) (= (new-state p) (state p)))))\n;; ----\n;; --- new-next = next[(prev x) -> (next x); x -> null]\n(assert (= (new-next x) null))\n(assert (= (new-next (prev x)) (next x)))\n(assert (forall ((p Ptr)) (or (= p x) (= p (prev x)) (= (new-next p) (next p)))))\n;; ---\n\n;; Proving the data-structure invariants in the new state.\n\n(push)\n(assert (not (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (new-next p) null)))\n (= (new-prev (new-next p)) p)))))\n(check-sat)\n(get-model)\n(pop)\n(echo "Why it is not valid?")\n(echo "Trying again using a fresh constant bad-ptr as an witness for the failure...")\n(push)\n(declare-const bad-ptr Ptr)\n(assert (not (=> (and (not (= bad-ptr null))\n (not (= (new-next bad-ptr) null)))\n (= (new-prev (new-next bad-ptr)) bad-ptr))))\n(check-sat)\n(get-model)\n(echo "null is")\n(eval null)\n(echo "bad-ptr is")\n(eval bad-ptr)\n(echo "In the new state, bad-ptr.next is")\n(eval (new-next bad-ptr))\n(echo "In the new state, bad-ptr.next.prev is")\n(eval (new-prev (new-next bad-ptr)))\n(pop)\n',result:{output:"sat\n(\n ;; universe for Ptr:\n ;; Ptr!val!2 Ptr!val!1 Ptr!val!0 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Ptr!val!2 () Ptr)\n (declare-fun Ptr!val!1 () Ptr)\n (declare-fun Ptr!val!0 () Ptr)\n ;; cardinality constraint:\n (forall ((x Ptr)) (or (= x Ptr!val!2) (= x Ptr!val!1) (= x Ptr!val!0)))\n ;; -----------\n (define-fun SLP () Int\n 3)\n (define-fun null () Ptr\n Ptr!val!1)\n (define-fun x () Ptr\n Ptr!val!0)\n (define-fun RUN () Int\n 2)\n (define-fun prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n Ptr!val!1)))\n (define-fun next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n Ptr!val!1)))\n (define-fun prio ((x!0 Ptr)) Int\n 0)\n (define-fun new-prio ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!0) 0\n (ite (= x!0 Ptr!val!2) 0\n (prio x!0))))\n (define-fun new-prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n (prev x!0))))\n (define-fun state ((x!0 Ptr)) Int\n 2)\n (define-fun new-state ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!0) 3\n (ite (= x!0 Ptr!val!2) 2\n (state x!0))))\n (define-fun new-next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!1\n (ite (= x!0 Ptr!val!2) Ptr!val!2\n (next x!0))))\n)\nWhy it is not valid?\nTrying again using a fresh constant bad-ptr as an witness for the failure...\nsat\n(\n ;; universe for Ptr:\n ;; Ptr!val!3 Ptr!val!5 Ptr!val!2 Ptr!val!1 Ptr!val!4 Ptr!val!0 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Ptr!val!3 () Ptr)\n (declare-fun Ptr!val!5 () Ptr)\n (declare-fun Ptr!val!2 () Ptr)\n (declare-fun Ptr!val!1 () Ptr)\n (declare-fun Ptr!val!4 () Ptr)\n (declare-fun Ptr!val!0 () Ptr)\n ;; cardinality constraint:\n (forall ((x Ptr))\n (or (= x Ptr!val!3)\n (= x Ptr!val!5)\n (= x Ptr!val!2)\n (= x Ptr!val!1)\n (= x Ptr!val!4)\n (= x Ptr!val!0)))\n ;; -----------\n (define-fun bad-ptr () Ptr\n Ptr!val!2)\n (define-fun SLP () Int\n 3)\n (define-fun x () Ptr\n Ptr!val!0)\n (define-fun RUN () Int\n 2)\n (define-fun null () Ptr\n Ptr!val!1)\n (define-fun prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!3) Ptr!val!0\n (ite (= x!0 Ptr!val!4) Ptr!val!3\n (ite (= x!0 Ptr!val!5) Ptr!val!4\n Ptr!val!1)))))\n (define-fun next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!3\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n (ite (= x!0 Ptr!val!3) Ptr!val!4\n (ite (= x!0 Ptr!val!4) Ptr!val!5\n Ptr!val!1)))))\n (define-fun prio ((x!0 Ptr)) Int\n 0)\n (define-fun new-prio ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!2) 0\n (ite (= x!0 Ptr!val!0) 0\n (ite (= x!0 Ptr!val!3) 0\n (ite (= x!0 Ptr!val!4) 0\n (ite (= x!0 Ptr!val!5) 0\n (prio x!0)))))))\n (define-fun new-prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!3) Ptr!val!0\n (ite (= x!0 Ptr!val!4) Ptr!val!3\n (ite (= x!0 Ptr!val!5) Ptr!val!4\n (prev x!0))))))\n (define-fun state ((x!0 Ptr)) Int\n 2)\n (define-fun new-state ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!0) 3\n (ite (= x!0 Ptr!val!2) 2\n (ite (= x!0 Ptr!val!3) 2\n (ite (= x!0 Ptr!val!4) 2\n (ite (= x!0 Ptr!val!5) 2\n (state x!0)))))))\n (define-fun new-next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!1\n (ite (= x!0 Ptr!val!2) Ptr!val!3\n (ite (= x!0 Ptr!val!3) Ptr!val!4\n (ite (= x!0 Ptr!val!4) Ptr!val!5\n (ite (= x!0 Ptr!val!5) Ptr!val!1\n (next x!0)))))))\n)\nnull is\nPtr!val!1\nbad-ptr is\nPtr!val!2\nIn the new state, bad-ptr.next is\nPtr!val!3\nIn the new state, bad-ptr.next.prev is\nPtr!val!0\n",error:"",status:"z3-ran",hash:"8c81211cb1ffd3294117199ce45a34076ff5184e"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Shifts on streams (or arrays) can also be encoded."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n;; f an g are "streams"\n(declare-fun f (Int) Int)\n(declare-fun g (Int) Int)\n\n;; the segment [a, n + a] of stream f is equal to the segment [0, n] of stream g.\n(declare-const n Int)\n(declare-const a Int)\n(assert (forall ((x Int)) (=> (and (<= 0 x) (<= x n))\n (= (f (+ x a)) (g x)))))\n\n;; adding some constraints to a\n(assert (> a 10))\n(assert (>= (f a) 2))\n(assert (<= (g 3) (- 10)))\n\n(check-sat)\n(get-model)',result:{output:"sat\n(\n (define-fun n () Int\n 0)\n (define-fun a () Int\n 11)\n (define-fun f ((x!0 Int)) Int\n 2)\n (define-fun g ((x!0 Int)) Int\n (ite (= x!0 3) (- 10)\n (f (+ 11 x!0))))\n)\n",error:"",status:"z3-ran",hash:"dd3a84a4109ed5c1a4feff9b4ef79de54459ab15"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"quantified-bit-vector-formulas"},"Quantified Bit-Vector Formulas"),(0,i.kt)("p",null,"A quantified bit-Vector formula (QBVF) is a many sorted first-order logic formula where the sort of every variable is a bit-vector sort. The QBVF satisfiability problem, is the problem of deciding whether a QBVF is satisfiable modulo the theory of bit-vectors. This problem is decidable because every universal (existential) quantifier can be expanded into a conjunction (disjunction) of potentially exponential, but finite size. A distinguishing feature in QBVF is the support for uninterpreted function and predicate symbols. More information about this fragment can be found in the paper ",(0,i.kt)("a",{parentName:"p",href:"https://www.winterstiger.at/christoph/papers/whd10.pdf"},"Efficiently Solving Quantified Bit-Vector Formulas"),"."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(define-sort AsciiChar () (_ BitVec 8))\n\n(declare-fun f (AsciiChar) AsciiChar)\n(declare-fun f1 (AsciiChar) AsciiChar)\n(declare-const a AsciiChar)\n\n(assert (bvugt a #x00))\n(assert (= (f1 (bvadd a #x01)) #x00))\n(assert (forall ((x AsciiChar)) (or (= x (bvadd a #x01)) (= (f1 x) (f x)))))\n\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun a () (_ BitVec 8)\n #xfd)\n (define-fun f ((x!0 (_ BitVec 8))) (_ BitVec 8)\n #xfd)\n (define-fun f1 ((x!0 (_ BitVec 8))) (_ BitVec 8)\n (ite (= x!0 #xfe) #x00\n (f x!0)))\n)\n",error:"",status:"z3-ran",hash:"c264234a691ddac70df56548ce77462ede0f8e80"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"conditional-and-pseudo-macros"},"Conditional (and Pseudo) Macros"),(0,i.kt)("p",null,"Quantifiers defining macros are also automatically detected by the Model Finder. In the following example, the first three quantifiers are defining f by cases."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(declare-fun f (Int) Int)\n(declare-fun p (Int) Bool)\n(declare-fun p2 (Int) Bool)\n(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (forall ((x Int)) \n (=> (not (p x)) (= (f x) (+ x 1)))))\n(assert (forall ((x Int)) \n (=> (and (p x) (not (p2 x))) (= (f x) x))))\n(assert (forall ((x Int)) \n (=> (p2 x) (= (f x) (- x 1)))))\n(assert (p b))\n(assert (p c))\n(assert (p2 a))\n(assert (> (f a) b))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun c () Int\n 1236)\n (define-fun b () Int\n 0)\n (define-fun a () Int\n 2)\n (define-fun p ((x!0 Int)) Bool\n true)\n (define-fun p2 ((x!0 Int)) Bool\n (ite (= x!0 2) true\n false))\n (define-fun f ((x!0 Int)) Int\n (ite (= x!0 2) 1\n (ite (= x!0 0) 0\n (ite (= x!0 1236) 1236\n (let ((a!1 (ite (and (p x!0) (not (p2 x!0))) x!0 (+ 1 x!0))))\n (ite (p2 x!0) (+ (- 1) x!0) a!1))))))\n)\n",error:"",status:"z3-ran",hash:"93b6b00598ccc4520467c29479ec2546a13771c7"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"my-formula-is-not-in-any-of-the-fragments-above"},"My formula is not in any of the fragments above"),(0,i.kt)("p",null,"Even if your formula is not in any of the fragments above. Z3 may still find a model for it. For example, The following simple example is not in the fragments described above."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(declare-fun n () Int)\n(declare-fun a_1 () Int)\n(declare-fun f (Int) Int)\n(declare-fun g_1 (Int) Int)\n(assert (> n 0))\n(assert (forall ((i Int))\n (=> (and (<= 0 i) (<= i n))\n (and (= (f 0) 0)\n (= (f 2) 2)\n (<= 0 (f i))\n (<= (f i) 2)\n (=> (= (f i) 2) (= i n))\n (=> (= (f i) 0)\n (or (= (f (+ i 1)) 1) (= (f (+ i 1)) 2)))\n (=> (= (f i) 1)\n (or (= (f (+ i 1)) 1) (= (f (+ i 1)) 2)))\n (= (g_1 0) 0)\n (=> (= (f i) 0) (= (g_1 (+ i 1)) 0))\n (=> (= (f i) 1) (= (g_1 (+ i 1)) (+ (g_1 i) 1)))\n (=> (= (f i) 2)\n (= (g_1 (+ i 1)) (g_1 i)))\n (=> (= (f i) 1) (< (g_1 i) a_1))\n (=> (= (f i) 2) \n (and (>= (g_1 i) a_1) (> (g_1 i) 2)))))))\n(check-sat)\n(get-model)\n\n(echo "Property does not hold for n > 1")\n(assert (> n 1))\n(check-sat)',result:{output:"sat\n(\n (define-fun n () Int\n 1)\n (define-fun a_1 () Int\n 1)\n (define-fun k!2 ((x!0 Int)) Int\n (ite (<= 0 x!0) (ite (<= 1 x!0) (ite (<= 2 x!0) 2 1) 0) (- 1)))\n (define-fun g_1 ((x!0 Int)) Int\n (let ((a!1 (ite (= (k!2 x!0) 2) 1 (ite (= (k!2 x!0) 0) 0 8))))\n (ite (= (k!2 x!0) 1) 0 a!1)))\n (define-fun f ((x!0 Int)) Int\n (let ((a!1 (ite (= (k!2 x!0) 2) 2 (ite (= (k!2 x!0) 0) 0 9))))\n (ite (= (k!2 x!0) 1) 1 a!1)))\n)\nProperty does not hold for n > 1\nunsat\n",error:"",status:"z3-ran",hash:"948738e615eacb8daca79f9660b0a9e6ea9b49e1"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The Z3 preprocessor has many options that may improve the performance of the model finder. In the following example, macro-finder will expand quantifiers representing macros at preprocessing time."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(set-option :smt.macro-finder true)\n\n(declare-sort Action)\n(declare-sort Role)\n(declare-sort Permission)\n(declare-sort Id)\n\n(declare-fun Client () Role) \n(declare-fun FinAdmin () Role)\n(declare-fun FinClerk () Role)\n(declare-fun Manager () Role)\n(declare-fun POAdmin () Role)\n(declare-fun POClerk () Role)\n(declare-fun action2int (Action) Int)\n(declare-fun id1 () Id)\n(declare-fun id2 () Id)\n(declare-fun id2int (Id) Int)\n(declare-fun id3 () Id)\n(declare-fun id4 () Id)\n(declare-fun id5 () Id)\n(declare-fun id6 () Id)\n(declare-fun id7 () Id)\n(declare-fun p1 () Permission)\n(declare-fun p2 () Permission)\n(declare-fun p3 () Permission)\n(declare-fun p4 () Permission)\n(declare-fun p5 () Permission)\n(declare-fun p6 () Permission)\n(declare-fun permission2int (Permission) Int)\n(declare-fun role2int (Role) Int)\n(declare-fun role_level (Role) Int)\n(declare-fun t1_receive () Action)\n(declare-fun t2_invoke () Action)\n(declare-fun t3_split () Action)\n(declare-fun t4_join () Action)\n(declare-fun t5_invoke () Action)\n(declare-fun t6_invoke () Action)\n(declare-fun t7_invokeO () Action)\n(declare-fun t8_invokeI () Action)\n(declare-fun t9_invoke () Action)\n(declare-fun in_creator_ctrPay_0 () Int)\n(declare-fun in_creator_ctrPay_1 () Int)\n(declare-fun in_customer_crtPO_0 () Int)\n(declare-fun in_customer_crtPO_1 () Int)\n(declare-fun out_approverPOPayment_apprPay_0 () Int)\n(declare-fun out_approverPOPayment_apprPay_1 () Int)\n(declare-fun out_approverPO_apprPO_0 () Int)\n(declare-fun out_approverPO_apprPO_1 () Int)\n(declare-fun out_creator_ctrPay_0 () Int)\n(declare-fun out_creator_ctrPay_1 () Int)\n(declare-fun out_signerGRN_ctrsignGRN_0 () Int)\n(declare-fun out_signerGRN_ctrsignGRN_1 () Int)\n(declare-fun out_signerGRN_signGRN_0 () Int)\n(declare-fun out_signerGRN_signGRN_1 () Int)\n(declare-fun p10_final_0 () Int)\n(declare-fun p10_final_1 () Int)\n(declare-fun p11_final_0 () Int)\n(declare-fun p11_final_1 () Int)\n(declare-fun p1_final_0 () Int)\n(declare-fun p1_final_1 () Int)\n(declare-fun p2_final_0 () Int)\n(declare-fun p2_final_1 () Int)\n(declare-fun p3_running_0 () Int)\n(declare-fun p3_running_1 () Int)\n(declare-fun p4_final_0 () Int)\n(declare-fun p4_final_1 () Int)\n(declare-fun p5_final_0 () Int)\n(declare-fun p5_final_1 () Int)\n(declare-fun p6_initial_0 () Int)\n(declare-fun p6_initial_1 () Int)\n(declare-fun p7_final_0 () Int)\n(declare-fun p7_final_1 () Int)\n(declare-fun p8_initial_0 () Int)\n(declare-fun p8_initial_1 () Int)\n(declare-fun p9_initial_0 () Int)\n(declare-fun p9_initial_1 () Int)\n\n\n;PREDICATES\n\n(declare-fun has_permission (Id Action) Bool)\n(declare-fun permission (Permission Action) Bool)\n(declare-fun role (Role) Bool)\n(declare-fun role_le (Role Role) Bool)\n(declare-fun role_permission_assign (Role Permission) Bool)\n(declare-fun user (Id) Bool)\n(declare-fun user_role_assign (Id Role) Bool)\n(declare-fun can_exec_0 (Id Action) Bool)\n(declare-fun can_exec_1 (Id Action) Bool)\n(declare-fun executed_0 (Id Action) Bool) \n(declare-fun executed_1 (Id Action) Bool)\n(declare-fun initial_pm_0 () Bool)\n(declare-fun initial_wf_0 () Bool)\n(declare-fun t1_receive_0_1 (Id) Bool)\n(declare-fun t2_invoke_0_1 (Id) Bool)\n(declare-fun t3_split_0_1 (Id) Bool)\n(declare-fun t4_join_0_1 (Id) Bool)\n(declare-fun t5_invoke_0_1 (Id) Bool)\n(declare-fun t6_invoke_0_1 (Id) Bool)\n(declare-fun t7_invokeO_0_1 (Id) Bool)\n(declare-fun t8_invokeI_0_1 (Id) Bool)\n(declare-fun t9_invoke_0_1 (Id) Bool)\n\n(assert\n(forall ((?U Action) (?V Action)) (implies (= (action2int ?U) (action2int ?V)) (= ?U ?V))))\n \n\n;assumption 2\n(assert\n(forall ((?U Action)) (and (<= 1 (action2int ?U)) (<= (action2int ?U) 9))))\n \n\n;assumption 3\n(assert\n(= (action2int t1_receive) 1))\n\n;assumption 4\n(assert\n(= (action2int t2_invoke) 2))\n\n;assumption 5\n(assert\n(= (action2int t3_split) 3))\n\n;assumption 6\n(assert\n(= (action2int t4_join) 4))\n\n;assumption 7\n(assert\n(= (action2int t5_invoke) 5))\n\n;assumption 8\n(assert\n(= (action2int t6_invoke) 6))\n\n;assumption 9\n(assert\n(= (action2int t7_invokeO) 7))\n\n;assumption 10\n(assert\n(= (action2int t8_invokeI) 8))\n\n;assumption 11\n(assert\n(= (action2int t9_invoke) 9))\n\n;assumption 12\n(assert\n(forall ((?U Role) (?V Role)) (implies (= (role2int ?U) (role2int ?V)) (= ?U ?V))))\n \n\n;assumption 13\n(assert\n(forall ((?U Role)) (and (<= 1 (role2int ?U)) (<= (role2int ?U) 6))))\n \n\n;assumption 14\n(assert\n(= (role2int Manager) 1))\n\n;assumption 15\n(assert\n(= (role2int FinAdmin) 2))\n\n;assumption 16\n(assert\n(= (role2int FinClerk) 3))\n\n;assumption 17\n(assert\n(= (role2int POAdmin) 4))\n\n;assumption 18\n(assert\n(= (role2int POClerk) 5))\n\n;assumption 19\n(assert\n(= (role2int Client) 6))\n\n;assumption 20\n(assert\n(forall ((?U Permission) (?V Permission)) (implies (= (permission2int ?U) (permission2int ?V)) (= ?U ?V))))\n \n\n;assumption 21\n(assert\n(forall ((?U Permission)) (and (<= 1 (permission2int ?U)) (<= (permission2int ?U) 6))))\n \n\n;assumption 22\n(assert\n(= (permission2int p1) 1))\n\n;assumption 23\n(assert\n(= (permission2int p2) 2))\n\n;assumption 24\n(assert\n(= (permission2int p3) 3))\n\n;assumption 25\n(assert\n(= (permission2int p4) 4))\n\n;assumption 26\n(assert\n(= (permission2int p5) 5))\n\n;assumption 27\n(assert\n(= (permission2int p6) 6))\n\n;assumption 28\n(assert\n(forall ((?U Permission) (?V Action)) (iff (permission ?U ?V) (or (and (= ?U p1) (= ?V t2_invoke)) (or (and (= ?U p2) (= ?V t5_invoke)) (or (and (= ?U p3) (= ?V t6_invoke)) (or (and (= ?U p4) (or (= ?V t7_invokeO) (= ?V t8_invokeI))) (or (and (= ?U p5) (= ?V t9_invoke)) (and (= ?U p6) (= ?V t1_receive))))))))))\n \n\n;assumption 29\n(assert\n(forall ((?U Id) (?V Role)) (iff (user_role_assign ?U ?V) (or (and (= ?U id7) (= ?V Manager)) (or (and (= ?U id1) (= ?V Manager)) (or (and (= ?U id2) (= ?V FinAdmin)) (or (and (= ?U id3) (= ?V FinClerk)) (or (and (= ?U id4) (= ?V POAdmin)) (or (and (= ?U id5) (= ?V POClerk)) (and (= ?U id6) (= ?V Client)))))))))))\n \n\n;assumption 30\n(assert\n(forall ((?U Role) (?V Permission)) (iff (role_permission_assign ?U ?V) (or (and (= ?U POClerk) (= ?V p3)) (or (and (= ?U FinClerk) (= ?V p4)) (or (and (= ?U POAdmin) (or (= ?V p1) (= ?V p3))) (or (and (= ?U FinAdmin) (or (= ?V p5) (= ?V p4))) (or (and (= ?U Client) (or (= ?V p6) (= ?V p2))) (and (= ?U Manager) (or (= ?V p1) (or (= ?V p3) (or (= ?V p4) (= ?V p5)))))))))))))\n \n\n;assumption 31\n(assert\n(forall ((?U Id) (?V Action)) (iff (has_permission ?U ?V) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p1) (permission p1 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p2) (permission p2 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p3) (permission p3 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p4) (permission p4 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p5) (permission p5 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p6) (permission p6 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p1) (permission p1 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p2) (permission p2 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p3) (permission p3 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p4) (permission p4 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p5) (permission p5 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p6) (permission p6 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p1) (permission p1 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p2) (permission p2 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p3) (permission p3 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p4) (permission p4 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p5) (permission p5 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p6) (permission p6 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p1) (permission p1 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p2) (permission p2 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p3) (permission p3 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p4) (permission p4 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p5) (permission p5 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p6) (permission p6 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p1) (permission p1 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p2) (permission p2 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p3) (permission p3 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p4) (permission p4 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p5) (permission p5 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p6) (permission p6 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p1) (permission p1 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p2) (permission p2 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p3) (permission p3 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p4) (permission p4 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p5) (permission p5 ?V))) (and (user_role_assign ?U Client) (and (role_permission_assign Client p6) (permission p6 ?V)))))))))))))))))))))))))))))))))))))))))\n \n\n;assumption 32\n(assert\n(forall ((?U Role) (?V Role)) (iff (role_le ?U ?V) (< (role_level ?U) (role_level ?V)))))\n \n\n;assumption 33\n(assert\n(= (role_level Manager) 3))\n\n;assumption 34\n(assert\n(= (role_level FinAdmin) 2))\n\n;assumption 35\n(assert\n(= (role_level FinClerk) 1))\n\n;assumption 36\n(assert\n(= (role_level POAdmin) 2))\n\n;assumption 37\n(assert\n(= (role_level POClerk) 1))\n\n;assumption 38\n(assert\n(= (role_level Client) 0))\n\n;assumption 39\n(assert\n(forall ((?U Id) (?V Id)) (implies (= (id2int ?U) (id2int ?V)) (= ?U ?V))))\n \n\n;assumption 40\n(assert\n(forall ((?U Id)) (and (<= 1 (id2int ?U)) (<= (id2int ?U) 7))))\n \n\n;assumption 41\n(assert\n(= (id2int id1) 1))\n\n;assumption 42\n(assert\n(= (id2int id2) 2))\n\n;assumption 43\n(assert\n(= (id2int id3) 3))\n\n;assumption 44\n(assert\n(= (id2int id4) 4))\n\n;assumption 45\n(assert\n(= (id2int id5) 5))\n\n;assumption 46\n(assert\n(= (id2int id6) 6))\n\n;assumption 47\n(assert\n(= (id2int id7) 7))\n\n;assumption 48\n(assert\n(iff initial_wf_0 (and (= p1_final_0 0) (and (= p2_final_0 0) (and (= p3_running_0 0) (and (= p4_final_0 0) (and (= p5_final_0 0) (and (= p6_initial_0 0) (and (= p7_final_0 0) (and (= p8_initial_0 0) (and (= p9_initial_0 1) (and (= p10_final_0 0) (and (= p11_final_0 0) (and (= in_customer_crtPO_0 1) (and (= in_creator_ctrPay_0 1) (and (= out_approverPO_apprPO_0 0) (and (= out_approverPOPayment_apprPay_0 0) (and (= out_creator_ctrPay_0 0) (and (= out_signerGRN_ctrsignGRN_0 0) (= out_signerGRN_signGRN_0 0))))))))))))))))))))\n\n;assumption 49\n(assert\n(iff initial_pm_0 (forall ((?U Id) (?V Action)) (iff (executed_0 ?U ?V) false))\n ))\n\n;assumption 50\n(assert\n(forall ((?U Id) (?V Action)) (iff (can_exec_0 ?U ?V) (or (and (= ?V t5_invoke) (and (has_permission ?U t5_invoke) (or (and (not (= ?U id1)) (executed_0 id1 t2_invoke)) (or (and (not (= ?U id2)) (executed_0 id2 t2_invoke)) (or (and (not (= ?U id3)) (executed_0 id3 t2_invoke)) (or (and (not (= ?U id4)) (executed_0 id4 t2_invoke)) (or (and (not (= ?U id5)) (executed_0 id5 t2_invoke)) (or (and (not (= ?U id6)) (executed_0 id6 t2_invoke)) (and (not (= ?U id7)) (executed_0 id7 t2_invoke)))))))))) (or (and (= ?V t6_invoke) (and (and (has_permission ?U t6_invoke) (or (and (not (= ?U id1)) (executed_0 id1 t2_invoke)) (or (and (not (= ?U id2)) (executed_0 id2 t2_invoke)) (or (and (not (= ?U id3)) (executed_0 id3 t2_invoke)) (or (and (not (= ?U id4)) (executed_0 id4 t2_invoke)) (or (and (not (= ?U id5)) (executed_0 id5 t2_invoke)) (or (and (not (= ?U id6)) (executed_0 id6 t2_invoke)) (and (not (= ?U id7)) (executed_0 id7 t2_invoke))))))))) (and (has_permission ?U t6_invoke) (or (and (not (= ?U id1)) (executed_0 id1 t5_invoke)) (or (and (not (= ?U id2)) (executed_0 id2 t5_invoke)) (or (and (not (= ?U id3)) (executed_0 id3 t5_invoke)) (or (and (not (= ?U id4)) (executed_0 id4 t5_invoke)) (or (and (not (= ?U id5)) (executed_0 id5 t5_invoke)) (or (and (not (= ?U id6)) (executed_0 id6 t5_invoke)) (and (not (= ?U id7)) (executed_0 id7 t5_invoke))))))))))) (or (and (= ?V t9_invoke) (and (has_permission ?U t9_invoke) (exists ((?W Role)) (and (user_role_assign ?U ?W) (and (or (and (user_role_assign id1 Manager) (and (role_le Manager ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 Manager) (and (role_le Manager ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 Manager) (and (role_le Manager ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 Manager) (and (role_le Manager ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 Manager) (and (role_le Manager ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 Manager) (and (role_le Manager ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 Manager) (and (role_le Manager ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 POClerk) (and (role_le POClerk ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 POClerk) (and (role_le POClerk ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 POClerk) (and (role_le POClerk ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 POClerk) (and (role_le POClerk ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 POClerk) (and (role_le POClerk ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 POClerk) (and (role_le POClerk ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 POClerk) (and (role_le POClerk ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 FinClerk) (and (role_le FinClerk ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 FinClerk) (and (role_le FinClerk ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 FinClerk) (and (role_le FinClerk ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 FinClerk) (and (role_le FinClerk ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 FinClerk) (and (role_le FinClerk ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 FinClerk) (and (role_le FinClerk ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 FinClerk) (and (role_le FinClerk ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 POAdmin) (and (role_le POAdmin ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 POAdmin) (and (role_le POAdmin ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 POAdmin) (and (role_le POAdmin ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 POAdmin) (and (role_le POAdmin ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 POAdmin) (and (role_le POAdmin ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 POAdmin) (and (role_le POAdmin ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 POAdmin) (and (role_le POAdmin ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 Client) (and (role_le Client ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 Client) (and (role_le Client ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 Client) (and (role_le Client ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 Client) (and (role_le Client ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 Client) (and (role_le Client ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 Client) (and (role_le Client ?W) (executed_0 id6 t7_invokeO))) (and (user_role_assign id7 Client) (and (role_le Client ?W) (executed_0 id7 t7_invokeO)))))))))))))))))))))))))))))))))))))))))))) (or (and (user_role_assign id1 Manager) (and (role_le Manager ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 Manager) (and (role_le Manager ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 Manager) (and (role_le Manager ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 Manager) (and (role_le Manager ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 Manager) (and (role_le Manager ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 Manager) (and (role_le Manager ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 Manager) (and (role_le Manager ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 POClerk) (and (role_le POClerk ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 POClerk) (and (role_le POClerk ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 POClerk) (and (role_le POClerk ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 POClerk) (and (role_le POClerk ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 POClerk) (and (role_le POClerk ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 POClerk) (and (role_le POClerk ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 POClerk) (and (role_le POClerk ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 FinClerk) (and (role_le FinClerk ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 FinClerk) (and (role_le FinClerk ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 FinClerk) (and (role_le FinClerk ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 FinClerk) (and (role_le FinClerk ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 FinClerk) (and (role_le FinClerk ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 FinClerk) (and (role_le FinClerk ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 FinClerk) (and (role_le FinClerk ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 POAdmin) (and (role_le POAdmin ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 POAdmin) (and (role_le POAdmin ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 POAdmin) (and (role_le POAdmin ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 POAdmin) (and (role_le POAdmin ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 POAdmin) (and (role_le POAdmin ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 POAdmin) (and (role_le POAdmin ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 POAdmin) (and (role_le POAdmin ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 Client) (and (role_le Client ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 Client) (and (role_le Client ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 Client) (and (role_le Client ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 Client) (and (role_le Client ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 Client) (and (role_le Client ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 Client) (and (role_le Client ?W) (executed_0 id6 t8_invokeI))) (and (user_role_assign id7 Client) (and (role_le Client ?W) (executed_0 id7 t8_invokeI))))))))))))))))))))))))))))))))))))))))))))) )) )) (or (and (= ?V t1_receive) (has_permission ?U t1_receive)) (or (and (= ?V t2_invoke) (has_permission ?U t2_invoke)) (or (and (= ?V t7_invokeO) (has_permission ?U t7_invokeO)) (and (= ?V t8_invokeI) (has_permission ?U t8_invokeI)))))))))))\n \n\n;assumption 51\n(assert\n(forall ((?U Id) (?V Action)) (iff (can_exec_1 ?U ?V) (or (and (= ?V t5_invoke) (and (has_permission ?U t5_invoke) (or (and (not (= ?U id1)) (executed_1 id1 t2_invoke)) (or (and (not (= ?U id2)) (executed_1 id2 t2_invoke)) (or (and (not (= ?U id3)) (executed_1 id3 t2_invoke)) (or (and (not (= ?U id4)) (executed_1 id4 t2_invoke)) (or (and (not (= ?U id5)) (executed_1 id5 t2_invoke)) (or (and (not (= ?U id6)) (executed_1 id6 t2_invoke)) (and (not (= ?U id7)) (executed_1 id7 t2_invoke)))))))))) (or (and (= ?V t6_invoke) (and (and (has_permission ?U t6_invoke) (or (and (not (= ?U id1)) (executed_1 id1 t2_invoke)) (or (and (not (= ?U id2)) (executed_1 id2 t2_invoke)) (or (and (not (= ?U id3)) (executed_1 id3 t2_invoke)) (or (and (not (= ?U id4)) (executed_1 id4 t2_invoke)) (or (and (not (= ?U id5)) (executed_1 id5 t2_invoke)) (or (and (not (= ?U id6)) (executed_1 id6 t2_invoke)) (and (not (= ?U id7)) (executed_1 id7 t2_invoke))))))))) (and (has_permission ?U t6_invoke) (or (and (not (= ?U id1)) (executed_1 id1 t5_invoke)) (or (and (not (= ?U id2)) (executed_1 id2 t5_invoke)) (or (and (not (= ?U id3)) (executed_1 id3 t5_invoke)) (or (and (not (= ?U id4)) (executed_1 id4 t5_invoke)) (or (and (not (= ?U id5)) (executed_1 id5 t5_invoke)) (or (and (not (= ?U id6)) (executed_1 id6 t5_invoke)) (and (not (= ?U id7)) (executed_1 id7 t5_invoke))))))))))) (or (and (= ?V t9_invoke) (and (has_permission ?U t9_invoke) (exists ((?W Role)) (and (user_role_assign ?U ?W) (and (or (and (user_role_assign id1 Manager) (and (role_le Manager ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 Manager) (and (role_le Manager ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 Manager) (and (role_le Manager ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 Manager) (and (role_le Manager ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 Manager) (and (role_le Manager ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 Manager) (and (role_le Manager ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 Manager) (and (role_le Manager ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 POClerk) (and (role_le POClerk ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 POClerk) (and (role_le POClerk ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 POClerk) (and (role_le POClerk ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 POClerk) (and (role_le POClerk ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 POClerk) (and (role_le POClerk ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 POClerk) (and (role_le POClerk ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 POClerk) (and (role_le POClerk ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 FinClerk) (and (role_le FinClerk ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 FinClerk) (and (role_le FinClerk ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 FinClerk) (and (role_le FinClerk ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 FinClerk) (and (role_le FinClerk ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 FinClerk) (and (role_le FinClerk ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 FinClerk) (and (role_le FinClerk ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 FinClerk) (and (role_le FinClerk ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 POAdmin) (and (role_le POAdmin ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 POAdmin) (and (role_le POAdmin ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 POAdmin) (and (role_le POAdmin ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 POAdmin) (and (role_le POAdmin ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 POAdmin) (and (role_le POAdmin ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 POAdmin) (and (role_le POAdmin ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 POAdmin) (and (role_le POAdmin ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 Client) (and (role_le Client ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 Client) (and (role_le Client ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 Client) (and (role_le Client ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 Client) (and (role_le Client ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 Client) (and (role_le Client ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 Client) (and (role_le Client ?W) (executed_1 id6 t7_invokeO))) (and (user_role_assign id7 Client) (and (role_le Client ?W) (executed_1 id7 t7_invokeO)))))))))))))))))))))))))))))))))))))))))))) (or (and (user_role_assign id1 Manager) (and (role_le Manager ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 Manager) (and (role_le Manager ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 Manager) (and (role_le Manager ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 Manager) (and (role_le Manager ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 Manager) (and (role_le Manager ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 Manager) (and (role_le Manager ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 Manager) (and (role_le Manager ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 POClerk) (and (role_le POClerk ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 POClerk) (and (role_le POClerk ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 POClerk) (and (role_le POClerk ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 POClerk) (and (role_le POClerk ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 POClerk) (and (role_le POClerk ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 POClerk) (and (role_le POClerk ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 POClerk) (and (role_le POClerk ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 FinClerk) (and (role_le FinClerk ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 FinClerk) (and (role_le FinClerk ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 FinClerk) (and (role_le FinClerk ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 FinClerk) (and (role_le FinClerk ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 FinClerk) (and (role_le FinClerk ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 FinClerk) (and (role_le FinClerk ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 FinClerk) (and (role_le FinClerk ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 POAdmin) (and (role_le POAdmin ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 POAdmin) (and (role_le POAdmin ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 POAdmin) (and (role_le POAdmin ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 POAdmin) (and (role_le POAdmin ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 POAdmin) (and (role_le POAdmin ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 POAdmin) (and (role_le POAdmin ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 POAdmin) (and (role_le POAdmin ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 Client) (and (role_le Client ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 Client) (and (role_le Client ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 Client) (and (role_le Client ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 Client) (and (role_le Client ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 Client) (and (role_le Client ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 Client) (and (role_le Client ?W) (executed_1 id6 t8_invokeI))) (and (user_role_assign id7 Client) (and (role_le Client ?W) (executed_1 id7 t8_invokeI))))))))))))))))))))))))))))))))))))))))))))) )) )) (or (and (= ?V t1_receive) (has_permission ?U t1_receive)) (or (and (= ?V t2_invoke) (has_permission ?U t2_invoke)) (or (and (= ?V t7_invokeO) (has_permission ?U t7_invokeO)) (and (= ?V t8_invokeI) (has_permission ?U t8_invokeI)))))))))))\n \n\n;assumption 52\n(assert\n(forall ((?U Id)) (iff (t1_receive_0_1 ?U)\n (and (and (can_exec_0 ?U t1_receive) (and (<= 1 in_customer_crtPO_0) (<= 1 p9_initial_0)))\n (and (and (= p1_final_1 p1_final_0) (and (= p2_final_1 p2_final_0) (and (= p3_running_1 p3_running_0) (and (= p4_final_1 p4_final_0) (and (= p5_final_1 p5_final_0) (and (= p6_initial_1 p6_initial_0) (and (= p7_final_1 p7_final_0) (and (= p8_initial_1 p8_initial_0) (and (= p9_initial_1 (+ (~ 1) p9_initial_0)) (and (= p10_final_1 (+ 1 p10_final_0)) (and (= p11_final_1 p11_final_0) (and (= in_customer_crtPO_1 (+ (~ 1) in_customer_crtPO_0)) (and (= in_creator_ctrPay_1 in_creator_ctrPay_0) (and (= out_creator_ctrPay_1 out_creator_ctrPay_0) (and (= out_approverPOPayment_apprPay_1 out_approverPOPayment_apprPay_0) (and (= out_approverPO_apprPO_1 out_approverPO_apprPO_0) (and (= out_signerGRN_signGRN_1 out_signerGRN_signGRN_0) (and (= out_signerGRN_ctrsignGRN_1 out_signerGRN_ctrsignGRN_0) true))))))))))))))))))\n (forall ((?V Id) (?W Action)) (iff (executed_1 ?V ?W) (or (and (= ?V ?U) (= ?W t1_receive)) (executed_0 ?V ?W))))\n )\n )\n )))\n \n\n;assumption 53\n(assert \n (not (and initial_wf_0 (and initial_pm_0 (t1_receive_0_1 id6))))\n )\n\n(set-info :status sat)\n(check-sat)\n(get-model)",result:{output:"sat\n(\n ;; universe for Permission:\n ;; Permission!val!0 Permission!val!5 Permission!val!2 Permission!val!1 Permission!val!3 Permission!val!4 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Permission!val!0 () Permission)\n (declare-fun Permission!val!5 () Permission)\n (declare-fun Permission!val!2 () Permission)\n (declare-fun Permission!val!1 () Permission)\n (declare-fun Permission!val!3 () Permission)\n (declare-fun Permission!val!4 () Permission)\n ;; cardinality constraint:\n (forall ((x Permission))\n (or (= x Permission!val!0)\n (= x Permission!val!5)\n (= x Permission!val!2)\n (= x Permission!val!1)\n (= x Permission!val!3)\n (= x Permission!val!4)))\n ;; -----------\n ;; universe for Action:\n ;; Action!val!5 Action!val!0 Action!val!2 Action!val!4 Action!val!7 Action!val!8 Action!val!1 Action!val!3 Action!val!6 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Action!val!5 () Action)\n (declare-fun Action!val!0 () Action)\n (declare-fun Action!val!2 () Action)\n (declare-fun Action!val!4 () Action)\n (declare-fun Action!val!7 () Action)\n (declare-fun Action!val!8 () Action)\n (declare-fun Action!val!1 () Action)\n (declare-fun Action!val!3 () Action)\n (declare-fun Action!val!6 () Action)\n ;; cardinality constraint:\n (forall ((x Action))\n (or (= x Action!val!5)\n (= x Action!val!0)\n (= x Action!val!2)\n (= x Action!val!4)\n (= x Action!val!7)\n (= x Action!val!8)\n (= x Action!val!1)\n (= x Action!val!3)\n (= x Action!val!6)))\n ;; -----------\n ;; universe for Id:\n ;; Id!val!5 Id!val!2 Id!val!0 Id!val!3 Id!val!6 Id!val!1 Id!val!4 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Id!val!5 () Id)\n (declare-fun Id!val!2 () Id)\n (declare-fun Id!val!0 () Id)\n (declare-fun Id!val!3 () Id)\n (declare-fun Id!val!6 () Id)\n (declare-fun Id!val!1 () Id)\n (declare-fun Id!val!4 () Id)\n ;; cardinality constraint:\n (forall ((x Id))\n (or (= x Id!val!5)\n (= x Id!val!2)\n (= x Id!val!0)\n (= x Id!val!3)\n (= x Id!val!6)\n (= x Id!val!1)\n (= x Id!val!4)))\n ;; -----------\n ;; universe for Role:\n ;; Role!val!3 Role!val!4 Role!val!0 Role!val!2 Role!val!5 Role!val!1 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Role!val!3 () Role)\n (declare-fun Role!val!4 () Role)\n (declare-fun Role!val!0 () Role)\n (declare-fun Role!val!2 () Role)\n (declare-fun Role!val!5 () Role)\n (declare-fun Role!val!1 () Role)\n ;; cardinality constraint:\n (forall ((x Role))\n (or (= x Role!val!3)\n (= x Role!val!4)\n (= x Role!val!0)\n (= x Role!val!2)\n (= x Role!val!5)\n (= x Role!val!1)))\n ;; -----------\n (define-fun out_signerGRN_signGRN_1 () Int\n 2)\n (define-fun p10_final_1 () Int\n 3)\n (define-fun p3_running_1 () Int\n 2)\n (define-fun t9_invoke () Action\n Action!val!8)\n (define-fun id5 () Id\n Id!val!4)\n (define-fun out_signerGRN_ctrsignGRN_1 () Int\n 2)\n (define-fun p11_final_1 () Int\n 2)\n (define-fun p4_final_1 () Int\n 2)\n (define-fun t6_invoke () Action\n Action!val!5)\n (define-fun t1_receive () Action\n Action!val!0)\n (define-fun POClerk () Role\n Role!val!4)\n (define-fun t5_invoke () Action\n Action!val!4)\n (define-fun in_customer_crtPO_1 () Int\n 8)\n (define-fun FinClerk () Role\n Role!val!2)\n (define-fun POAdmin () Role\n Role!val!3)\n (define-fun p5 () Permission\n Permission!val!4)\n (define-fun p2 () Permission\n Permission!val!1)\n (define-fun t3_split () Action\n Action!val!2)\n (define-fun id2 () Id\n Id!val!1)\n (define-fun Client () Role\n Role!val!5)\n (define-fun id1 () Id\n Id!val!0)\n (define-fun id6 () Id\n Id!val!5)\n (define-fun id7 () Id\n Id!val!6)\n (define-fun in_creator_ctrPay_1 () Int\n 3)\n (define-fun p6_initial_1 () Int\n 2)\n (define-fun t7_invokeO () Action\n Action!val!6)\n (define-fun p5_final_1 () Int\n 2)\n (define-fun p3 () Permission\n Permission!val!2)\n (define-fun in_customer_crtPO_0 () Int\n 8)\n (define-fun FinAdmin () Role\n Role!val!1)\n (define-fun t2_invoke () Action\n Action!val!1)\n (define-fun out_creator_ctrPay_1 () Int\n 2)\n (define-fun p1 () Permission\n Permission!val!0)\n (define-fun p7_final_1 () Int\n 2)\n (define-fun p9_initial_0 () Int\n 2)\n (define-fun out_approverPOPayment_apprPay_1 () Int\n 2)\n (define-fun t4_join () Action\n Action!val!3)\n (define-fun p8_initial_1 () Int\n 2)\n (define-fun id4 () Id\n Id!val!3)\n (define-fun p1_final_1 () Int\n 2)\n (define-fun Manager () Role\n Role!val!0)\n (define-fun p4 () Permission\n Permission!val!3)\n (define-fun p6 () Permission\n Permission!val!5)\n (define-fun t8_invokeI () Action\n Action!val!7)\n (define-fun out_approverPO_apprPO_1 () Int\n 2)\n (define-fun p9_initial_1 () Int\n 2)\n (define-fun p2_final_1 () Int\n 2)\n (define-fun id3 () Id\n Id!val!2)\n (define-fun out_signerGRN_signGRN_0 () Int\n 1)\n (define-fun out_signerGRN_ctrsignGRN_0 () Int\n 1)\n (define-fun out_creator_ctrPay_0 () Int\n 1)\n (define-fun out_approverPOPayment_apprPay_0 () Int\n 1)\n (define-fun out_approverPO_apprPO_0 () Int\n 1)\n (define-fun in_creator_ctrPay_0 () Int\n 2)\n (define-fun p11_final_0 () Int\n 1)\n (define-fun p10_final_0 () Int\n 1)\n (define-fun p8_initial_0 () Int\n 1)\n (define-fun p7_final_0 () Int\n 1)\n (define-fun p6_initial_0 () Int\n 1)\n (define-fun p5_final_0 () Int\n 1)\n (define-fun p4_final_0 () Int\n 1)\n (define-fun p3_running_0 () Int\n 1)\n (define-fun p2_final_0 () Int\n 1)\n (define-fun p1_final_0 () Int\n 1)\n (define-fun initial_wf_0 () Bool\n false)\n (define-fun initial_pm_0 () Bool\n true)\n (define-fun role2int ((x!0 Role)) Int\n (let ((a!1 (ite (and (= x!0 Role!val!0)\n (not (= x!0 Role!val!1))\n (not (= x!0 Role!val!2))\n (not (= x!0 Role!val!3)))\n 1\n 11)))\n (let ((a!2 (ite (and (= x!0 Role!val!1)\n (not (= x!0 Role!val!2))\n (not (= x!0 Role!val!3)))\n 2\n a!1)))\n (let ((a!3 (ite (and (= x!0 Role!val!2) (not (= x!0 Role!val!3))) 3 a!2)))\n (let ((a!4 (ite (and (not (= x!0 Role!val!5))\n (not (= x!0 Role!val!0))\n (not (= x!0 Role!val!1))\n (not (= x!0 Role!val!2))\n (not (= x!0 Role!val!3)))\n 5\n (ite (= x!0 Role!val!3) 4 a!3))))\n (ite (and (= x!0 Role!val!5)\n (not (= x!0 Role!val!0))\n (not (= x!0 Role!val!1))\n (not (= x!0 Role!val!2))\n (not (= x!0 Role!val!3)))\n 6\n a!4))))))\n (define-fun user_role_assign ((x!0 Id) (x!1 Role)) Bool\n (or (and (= x!0 Id!val!5) (= x!1 Role!val!5))\n (and (= x!0 Id!val!4) (= x!1 Role!val!4))\n (and (= x!0 Id!val!3) (= x!1 Role!val!3))\n (and (= x!0 Id!val!2) (= x!1 Role!val!2))\n (and (= x!0 Id!val!1) (= x!1 Role!val!1))\n (and (= x!0 Id!val!0) (= x!1 Role!val!0))\n (and (= x!0 Id!val!6) (= x!1 Role!val!0))))\n (define-fun has_permission ((x!0 Id) (x!1 Action)) Bool\n (or (and (or (= x!0 Id!val!0) (= x!0 Id!val!6)) (= x!1 Action!val!1))\n (and (or (= x!0 Id!val!0) (= x!0 Id!val!6)) (= x!1 Action!val!5))\n (and (or (= x!0 Id!val!0) (= x!0 Id!val!6))\n (or (= x!1 Action!val!7) (= x!1 Action!val!6)))\n (and (or (= x!0 Id!val!0) (= x!0 Id!val!6)) (= x!1 Action!val!8))\n (and (= x!0 Id!val!4) (= x!1 Action!val!5))\n (and (= x!0 Id!val!2) (or (= x!1 Action!val!7) (= x!1 Action!val!6)))\n (and (= x!0 Id!val!1) (or (= x!1 Action!val!7) (= x!1 Action!val!6)))\n (and (= x!0 Id!val!1) (= x!1 Action!val!8))\n (and (= x!0 Id!val!3) (= x!1 Action!val!1))\n (and (= x!0 Id!val!3) (= x!1 Action!val!5))\n (and (= x!0 Id!val!5) (= x!1 Action!val!4))\n (and (= x!0 Id!val!5) (= x!1 Action!val!0))))\n (define-fun permission2int ((x!0 Permission)) Int\n (let ((a!1 (ite (and (not (= x!0 Permission!val!3))\n (not (= x!0 Permission!val!2))\n (not (= x!0 Permission!val!5))\n (not (= x!0 Permission!val!4))\n (not (= x!0 Permission!val!0)))\n 2\n (ite (= x!0 Permission!val!0) 1 10))))\n (let ((a!2 (ite (and (= x!0 Permission!val!2)\n (not (= x!0 Permission!val!5))\n (not (= x!0 Permission!val!4))\n (not (= x!0 Permission!val!0)))\n 3\n a!1)))\n (let ((a!3 (ite (and (= x!0 Permission!val!3)\n (not (= x!0 Permission!val!2))\n (not (= x!0 Permission!val!5))\n (not (= x!0 Permission!val!4))\n (not (= x!0 Permission!val!0)))\n 4\n a!2)))\n (let ((a!4 (ite (and (= x!0 Permission!val!4)\n (not (= x!0 Permission!val!0)))\n 5\n a!3)))\n (ite (and (= x!0 Permission!val!5)\n (not (= x!0 Permission!val!4))\n (not (= x!0 Permission!val!0)))\n 6\n a!4))))))\n (define-fun permission ((x!0 Permission) (x!1 Action)) Bool\n (or (and (= x!0 Permission!val!5) (= x!1 Action!val!0))\n (and (= x!0 Permission!val!4) (= x!1 Action!val!8))\n (and (= x!0 Permission!val!3)\n (or (= x!1 Action!val!6) (= x!1 Action!val!7)))\n (and (= x!0 Permission!val!2) (= x!1 Action!val!5))\n (and (= x!0 Permission!val!1) (= x!1 Action!val!4))\n (and (= x!0 Permission!val!0) (= x!1 Action!val!1))))\n (define-fun id2int ((x!0 Id)) Int\n (let ((a!1 (ite (and (= x!0 Id!val!0)\n (not (= x!0 Id!val!6))\n (not (= x!0 Id!val!1))\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 1\n 13)))\n (let ((a!2 (ite (and (= x!0 Id!val!1)\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 2\n a!1)))\n (let ((a!3 (ite (and (= x!0 Id!val!3)\n (not (= x!0 Id!val!0))\n (not (= x!0 Id!val!6))\n (not (= x!0 Id!val!1))\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 4\n (ite (= x!0 Id!val!2) 3 a!2))))\n (let ((a!4 (ite (and (not (= x!0 Id!val!3))\n (not (= x!0 Id!val!0))\n (not (= x!0 Id!val!6))\n (not (= x!0 Id!val!1))\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 5\n a!3)))\n (let ((a!5 (ite (and (= x!0 Id!val!5) (not (= x!0 Id!val!2))) 6 a!4)))\n (ite (and (= x!0 Id!val!6)\n (not (= x!0 Id!val!1))\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 7\n a!5)))))))\n (define-fun t1_receive_0_1 ((x!0 Id)) Bool\n false)\n (define-fun action2int ((x!0 Action)) Int\n (let ((a!1 (ite (and (not (= x!0 Action!val!6))\n (not (= x!0 Action!val!4))\n (not (= x!0 Action!val!1))\n (not (= x!0 Action!val!8))\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 1\n 12)))\n (let ((a!2 (ite (and (= x!0 Action!val!1)\n (not (= x!0 Action!val!8))\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 2\n a!1)))\n (let ((a!3 (ite (and (= x!0 Action!val!2)\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 3\n a!2)))\n (let ((a!4 (ite (and (= x!0 Action!val!4)\n (not (= x!0 Action!val!1))\n (not (= x!0 Action!val!8))\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 5\n (ite (= x!0 Action!val!3) 4 a!3))))\n (let ((a!5 (ite (and (= x!0 Action!val!5) (not (= x!0 Action!val!3))) 6 a!4)))\n (let ((a!6 (ite (and (= x!0 Action!val!6)\n (not (= x!0 Action!val!4))\n (not (= x!0 Action!val!1))\n (not (= x!0 Action!val!8))\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 7\n a!5)))\n (let ((a!7 (ite (and (= x!0 Action!val!7)\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 8\n a!6)))\n (ite (and (= x!0 Action!val!8)\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 9\n a!7)))))))))\n (define-fun executed_0 ((x!0 Id) (x!1 Action)) Bool\n false)\n (define-fun role_level ((x!0 Role)) Int\n (ite (= x!0 Role!val!0) 3\n (ite (= x!0 Role!val!2) 1\n (ite (= x!0 Role!val!4) 1\n (ite (= x!0 Role!val!5) 0\n 2)))))\n (define-fun can_exec_0 ((x!0 Id) (x!1 Action)) Bool\n (let ((a!1 (exists ((?W Role))\n (let ((a!1 (>= (+ (role_level Manager)\n (* (- 1) (role_level ?W)))\n 0))\n (a!2 (or (= Manager FinAdmin)\n (= id2 id7)\n (= id2 id1)\n (and (= id2 id3) (= Manager FinClerk))\n (and (= id2 id4) (= Manager POAdmin))\n (and (= id2 id5) (= Manager POClerk))\n (and (= id2 id6) (= Manager Client))))\n (a!3 (or (= Manager FinClerk)\n (= id3 id7)\n (= id3 id1)\n (and (= id3 id2) (= Manager FinAdmin))\n (and (= id3 id4) (= Manager POAdmin))\n (and (= id3 id5) (= Manager POClerk))\n (and (= id3 id6) (= Manager Client))))\n (a!4 (or (= Manager POAdmin)\n (= id4 id7)\n (= id4 id1)\n (and (= id4 id2) (= Manager FinAdmin))\n (and (= id4 id3) (= Manager FinClerk))\n (and (= id4 id5) (= Manager POClerk))\n (and (= id4 id6) (= Manager Client))))\n (a!5 (or (= Manager POClerk)\n (= id5 id7)\n (= id5 id1)\n (and (= id5 id2) (= Manager FinAdmin))\n (and (= id5 id3) (= Manager FinClerk))\n (and (= id5 id4) (= Manager POAdmin))\n (and (= id5 id6) (= Manager Client))))\n (a!6 (or (= Manager Client)\n (= id6 id7)\n (= id6 id1)\n (and (= id6 id2) (= Manager FinAdmin))\n (and (= id6 id3) (= Manager FinClerk))\n (and (= id6 id4) (= Manager POAdmin))\n (and (= id6 id5) (= Manager POClerk))))\n (a!7 (or (= POClerk Manager)\n (= id1 id5)\n (and (= id1 id7) (= POClerk Manager))\n (and (= id1 id2) (= POClerk FinAdmin))\n (and (= id1 id3) (= POClerk FinClerk))\n (and (= id1 id4) (= POClerk POAdmin))\n (and (= id1 id6) (= POClerk Client))))\n (a!8 (>= (+ (role_level POClerk)\n (* (- 1) (role_level ?W)))\n 0))\n (a!9 (or (= POClerk FinAdmin)\n (= id2 id5)\n (and (= id2 id7) (= POClerk Manager))\n (and (= id2 id1) (= POClerk Manager))\n (and (= id2 id3) (= POClerk FinClerk))\n (and (= id2 id4) (= POClerk POAdmin))\n (and (= id2 id6) (= POClerk Client))))\n (a!10 (or (= POClerk FinClerk)\n (= id3 id5)\n (and (= id3 id7) (= POClerk Manager))\n (and (= id3 id1) (= POClerk Manager))\n (and (= id3 id2) (= POClerk FinAdmin))\n (and (= id3 id4) (= POClerk POAdmin))\n (and (= id3 id6) (= POClerk Client))))\n (a!11 (or (= POClerk POAdmin)\n (= id4 id5)\n (and (= id4 id7) (= POClerk Manager))\n (and (= id4 id1) (= POClerk Manager))\n (and (= id4 id2) (= POClerk FinAdmin))\n (and (= id4 id3) (= POClerk FinClerk))\n (and (= id4 id6) (= POClerk Client))))\n (a!12 (or (= POClerk Client)\n (= id6 id5)\n (and (= id6 id7) (= POClerk Manager))\n (and (= id6 id1) (= POClerk Manager))\n (and (= id6 id2) (= POClerk FinAdmin))\n (and (= id6 id3) (= POClerk FinClerk))\n (and (= id6 id4) (= POClerk POAdmin))))\n (a!13 (or (= POClerk Manager)\n (= id7 id5)\n (and (= id7 id1) (= POClerk Manager))\n (and (= id7 id2) (= POClerk FinAdmin))\n (and (= id7 id3) (= POClerk FinClerk))\n (and (= id7 id4) (= POClerk POAdmin))\n (and (= id7 id6) (= POClerk Client))))\n (a!14 (or (= FinClerk Manager)\n (= id1 id3)\n (and (= id1 id7) (= FinClerk Manager))\n (and (= id1 id2) (= FinClerk FinAdmin))\n (and (= id1 id4) (= FinClerk POAdmin))\n (and (= id1 id5) (= FinClerk POClerk))\n (and (= id1 id6) (= FinClerk Client))))\n (a!15 (>= (+ (role_level FinClerk)\n (* (- 1) (role_level ?W)))\n 0))\n (a!16 (or (= FinClerk FinAdmin)\n (= id2 id3)\n (and (= id2 id7) (= FinClerk Manager))\n (and (= id2 id1) (= FinClerk Manager))\n (and (= id2 id4) (= FinClerk POAdmin))\n (and (= id2 id5) (= FinClerk POClerk))\n (and (= id2 id6) (= FinClerk Client))))\n (a!17 (or (= FinClerk POAdmin)\n (= id4 id3)\n (and (= id4 id7) (= FinClerk Manager))\n (and (= id4 id1) (= FinClerk Manager))\n (and (= id4 id2) (= FinClerk FinAdmin))\n (and (= id4 id5) (= FinClerk POClerk))\n (and (= id4 id6) (= FinClerk Client))))\n (a!18 (or (= FinClerk POClerk)\n (= id5 id3)\n (and (= id5 id7) (= FinClerk Manager))\n (and (= id5 id1) (= FinClerk Manager))\n (and (= id5 id2) (= FinClerk FinAdmin))\n (and (= id5 id4) (= FinClerk POAdmin))\n (and (= id5 id6) (= FinClerk Client))))\n (a!19 (or (= FinClerk Client)\n (= id6 id3)\n (and (= id6 id7) (= FinClerk Manager))\n (and (= id6 id1) (= FinClerk Manager))\n (and (= id6 id2) (= FinClerk FinAdmin))\n (and (= id6 id4) (= FinClerk POAdmin))\n (and (= id6 id5) (= FinClerk POClerk))))\n (a!20 (or (= FinClerk Manager)\n (= id7 id3)\n (and (= id7 id1) (= FinClerk Manager))\n (and (= id7 id2) (= FinClerk FinAdmin))\n (and (= id7 id4) (= FinClerk POAdmin))\n (and (= id7 id5) (= FinClerk POClerk))\n (and (= id7 id6) (= FinClerk Client))))\n (a!21 (or (= FinAdmin Manager)\n (= id1 id2)\n (and (= id1 id7) (= FinAdmin Manager))\n (and (= id1 id3) (= FinAdmin FinClerk))\n (and (= id1 id4) (= FinAdmin POAdmin))\n (and (= id1 id5) (= FinAdmin POClerk))\n (and (= id1 id6) (= FinAdmin Client))))\n (a!22 (>= (+ (role_level FinAdmin)\n (* (- 1) (role_level ?W)))\n 0))\n (a!23 (or (= FinAdmin FinClerk)\n (= id3 id2)\n (and (= id3 id7) (= FinAdmin Manager))\n (and (= id3 id1) (= FinAdmin Manager))\n (and (= id3 id4) (= FinAdmin POAdmin))\n (and (= id3 id5) (= FinAdmin POClerk))\n (and (= id3 id6) (= FinAdmin Client))))\n (a!24 (or (= FinAdmin POAdmin)\n (= id4 id2)\n (and (= id4 id7) (= FinAdmin Manager))\n (and (= id4 id1) (= FinAdmin Manager))\n (and (= id4 id3) (= FinAdmin FinClerk))\n (and (= id4 id5) (= FinAdmin POClerk))\n (and (= id4 id6) (= FinAdmin Client))))\n (a!25 (or (= FinAdmin POClerk)\n (= id5 id2)\n (and (= id5 id7) (= FinAdmin Manager))\n (and (= id5 id1) (= FinAdmin Manager))\n (and (= id5 id3) (= FinAdmin FinClerk))\n (and (= id5 id4) (= FinAdmin POAdmin))\n (and (= id5 id6) (= FinAdmin Client))))\n (a!26 (or (= FinAdmin Client)\n (= id6 id2)\n (and (= id6 id7) (= FinAdmin Manager))\n (and (= id6 id1) (= FinAdmin Manager))\n (and (= id6 id3) (= FinAdmin FinClerk))\n (and (= id6 id4) (= FinAdmin POAdmin))\n (and (= id6 id5) (= FinAdmin POClerk))))\n (a!27 (or (= FinAdmin Manager)\n (= id7 id2)\n (and (= id7 id1) (= FinAdmin Manager))\n (and (= id7 id3) (= FinAdmin FinClerk))\n (and (= id7 id4) (= FinAdmin POAdmin))\n (and (= id7 id5) (= FinAdmin POClerk))\n (and (= id7 id6) (= FinAdmin Client))))\n (a!28 (or (= POAdmin Manager)\n (= id1 id4)\n (and (= id1 id7) (= POAdmin Manager))\n (and (= id1 id2) (= POAdmin FinAdmin))\n (and (= id1 id3) (= POAdmin FinClerk))\n (and (= id1 id5) (= POAdmin POClerk))\n (and (= id1 id6) (= POAdmin Client))))\n (a!29 (>= (+ (role_level POAdmin)\n (* (- 1) (role_level ?W)))\n 0))\n (a!30 (or (= POAdmin FinAdmin)\n (= id2 id4)\n (and (= id2 id7) (= POAdmin Manager))\n (and (= id2 id1) (= POAdmin Manager))\n (and (= id2 id3) (= POAdmin FinClerk))\n (and (= id2 id5) (= POAdmin POClerk))\n (and (= id2 id6) (= POAdmin Client))))\n (a!31 (or (= POAdmin FinClerk)\n (= id3 id4)\n (and (= id3 id7) (= POAdmin Manager))\n (and (= id3 id1) (= POAdmin Manager))\n (and (= id3 id2) (= POAdmin FinAdmin))\n (and (= id3 id5) (= POAdmin POClerk))\n (and (= id3 id6) (= POAdmin Client))))\n (a!32 (or (= POAdmin POClerk)\n (= id5 id4)\n (and (= id5 id7) (= POAdmin Manager))\n (and (= id5 id1) (= POAdmin Manager))\n (and (= id5 id2) (= POAdmin FinAdmin))\n (and (= id5 id3) (= POAdmin FinClerk))\n (and (= id5 id6) (= POAdmin Client))))\n (a!33 (or (= POAdmin Client)\n (= id6 id4)\n (and (= id6 id7) (= POAdmin Manager))\n (and (= id6 id1) (= POAdmin Manager))\n (and (= id6 id2) (= POAdmin FinAdmin))\n (and (= id6 id3) (= POAdmin FinClerk))\n (and (= id6 id5) (= POAdmin POClerk))))\n (a!34 (or (= POAdmin Manager)\n (= id7 id4)\n (and (= id7 id1) (= POAdmin Manager))\n (and (= id7 id2) (= POAdmin FinAdmin))\n (and (= id7 id3) (= POAdmin FinClerk))\n (and (= id7 id5) (= POAdmin POClerk))\n (and (= id7 id6) (= POAdmin Client))))\n (a!35 (or (= Client Manager)\n (= id1 id6)\n (and (= id1 id7) (= Client Manager))\n (and (= id1 id2) (= Client FinAdmin))\n (and (= id1 id3) (= Client FinClerk))\n (and (= id1 id4) (= Client POAdmin))\n (and (= id1 id5) (= Client POClerk))))\n (a!36 (>= (+ (role_level Client)\n (* (- 1) (role_level ?W)))\n 0))\n (a!37 (or (= Client FinAdmin)\n (= id2 id6)\n (and (= id2 id7) (= Client Manager))\n (and (= id2 id1) (= Client Manager))\n (and (= id2 id3) (= Client FinClerk))\n (and (= id2 id4) (= Client POAdmin))\n (and (= id2 id5) (= Client POClerk))))\n (a!38 (or (= Client FinClerk)\n (= id3 id6)\n (and (= id3 id7) (= Client Manager))\n (and (= id3 id1) (= Client Manager))\n (and (= id3 id2) (= Client FinAdmin))\n (and (= id3 id4) (= Client POAdmin))\n (and (= id3 id5) (= Client POClerk))))\n (a!39 (or (= Client POAdmin)\n (= id4 id6)\n (and (= id4 id7) (= Client Manager))\n (and (= id4 id1) (= Client Manager))\n (and (= id4 id2) (= Client FinAdmin))\n (and (= id4 id3) (= Client FinClerk))\n (and (= id4 id5) (= Client POClerk))))\n (a!40 (or (= Client POClerk)\n (= id5 id6)\n (and (= id5 id7) (= Client Manager))\n (and (= id5 id1) (= Client Manager))\n (and (= id5 id2) (= Client FinAdmin))\n (and (= id5 id3) (= Client FinClerk))\n (and (= id5 id4) (= Client POAdmin))))\n (a!41 (or (= Client Manager)\n (= id7 id6)\n (and (= id7 id1) (= Client Manager))\n (and (= id7 id2) (= Client FinAdmin))\n (and (= id7 id3) (= Client FinClerk))\n (and (= id7 id4) (= Client POAdmin))\n (and (= id7 id5) (= Client POClerk)))))\n (and (or (and (= x!0 id7) (= ?W Manager))\n (and (= x!0 id1) (= ?W Manager))\n (and (= x!0 id2) (= ?W FinAdmin))\n (and (= x!0 id3) (= ?W FinClerk))\n (and (= x!0 id4) (= ?W POAdmin))\n (and (= x!0 id5) (= ?W POClerk))\n (and (= x!0 id6) (= ?W Client)))\n (or (and (not a!1) (executed_0 id1 t7_invokeO))\n (and a!2 (not a!1) (executed_0 id2 t7_invokeO))\n (and a!3 (not a!1) (executed_0 id3 t7_invokeO))\n (and a!4 (not a!1) (executed_0 id4 t7_invokeO))\n (and a!5 (not a!1) (executed_0 id5 t7_invokeO))\n (and a!6 (not a!1) (executed_0 id6 t7_invokeO))\n (and (not a!1) (executed_0 id7 t7_invokeO))\n (and a!7 (not a!8) (executed_0 id1 t7_invokeO))\n (and a!9 (not a!8) (executed_0 id2 t7_invokeO))\n (and a!10 (not a!8) (executed_0 id3 t7_invokeO))\n (and a!11 (not a!8) (executed_0 id4 t7_invokeO))\n (and (not a!8) (executed_0 id5 t7_invokeO))\n (and a!12 (not a!8) (executed_0 id6 t7_invokeO))\n (and a!13 (not a!8) (executed_0 id7 t7_invokeO))\n (and a!14 (not a!15) (executed_0 id1 t7_invokeO))\n (and a!16 (not a!15) (executed_0 id2 t7_invokeO))\n (and (not a!15) (executed_0 id3 t7_invokeO))\n (and a!17 (not a!15) (executed_0 id4 t7_invokeO))\n (and a!18 (not a!15) (executed_0 id5 t7_invokeO))\n (and a!19 (not a!15) (executed_0 id6 t7_invokeO))\n (and a!20 (not a!15) (executed_0 id7 t7_invokeO))\n (and a!21 (not a!22) (executed_0 id1 t7_invokeO))\n (and (not a!22) (executed_0 id2 t7_invokeO))\n (and a!23 (not a!22) (executed_0 id3 t7_invokeO))\n (and a!24 (not a!22) (executed_0 id4 t7_invokeO))\n (and a!25 (not a!22) (executed_0 id5 t7_invokeO))\n (and a!26 (not a!22) (executed_0 id6 t7_invokeO))\n (and a!27 (not a!22) (executed_0 id7 t7_invokeO))\n (and a!28 (not a!29) (executed_0 id1 t7_invokeO))\n (and a!30 (not a!29) (executed_0 id2 t7_invokeO))\n (and a!31 (not a!29) (executed_0 id3 t7_invokeO))\n (and (not a!29) (executed_0 id4 t7_invokeO))\n (and a!32 (not a!29) (executed_0 id5 t7_invokeO))\n (and a!33 (not a!29) (executed_0 id6 t7_invokeO))\n (and a!34 (not a!29) (executed_0 id7 t7_invokeO))\n (and a!35 (not a!36) (executed_0 id1 t7_invokeO))\n (and a!37 (not a!36) (executed_0 id2 t7_invokeO))\n (and a!38 (not a!36) (executed_0 id3 t7_invokeO))\n (and a!39 (not a!36) (executed_0 id4 t7_invokeO))\n (and a!40 (not a!36) (executed_0 id5 t7_invokeO))\n (and (not a!36) (executed_0 id6 t7_invokeO))\n (and a!41 (not a!36) (executed_0 id7 t7_invokeO)))\n (or (and (not a!1) (executed_0 id1 t8_invokeI))\n (and a!2 (not a!1) (executed_0 id2 t8_invokeI))\n (and a!3 (not a!1) (executed_0 id3 t8_invokeI))\n (and a!4 (not a!1) (executed_0 id4 t8_invokeI))\n (and a!5 (not a!1) (executed_0 id5 t8_invokeI))\n (and a!6 (not a!1) (executed_0 id6 t8_invokeI))\n (and (not a!1) (executed_0 id7 t8_invokeI))\n (and a!7 (not a!8) (executed_0 id1 t8_invokeI))\n (and a!9 (not a!8) (executed_0 id2 t8_invokeI))\n (and a!10 (not a!8) (executed_0 id3 t8_invokeI))\n (and a!11 (not a!8) (executed_0 id4 t8_invokeI))\n (and (not a!8) (executed_0 id5 t8_invokeI))\n (and a!12 (not a!8) (executed_0 id6 t8_invokeI))\n (and a!13 (not a!8) (executed_0 id7 t8_invokeI))\n (and a!14 (not a!15) (executed_0 id1 t8_invokeI))\n (and a!16 (not a!15) (executed_0 id2 t8_invokeI))\n (and (not a!15) (executed_0 id3 t8_invokeI))\n (and a!17 (not a!15) (executed_0 id4 t8_invokeI))\n (and a!18 (not a!15) (executed_0 id5 t8_invokeI))\n (and a!19 (not a!15) (executed_0 id6 t8_invokeI))\n (and a!20 (not a!15) (executed_0 id7 t8_invokeI))\n (and a!21 (not a!22) (executed_0 id1 t8_invokeI))\n (and (not a!22) (executed_0 id2 t8_invokeI))\n (and a!23 (not a!22) (executed_0 id3 t8_invokeI))\n (and a!24 (not a!22) (executed_0 id4 t8_invokeI))\n (and a!25 (not a!22) (executed_0 id5 t8_invokeI))\n (and a!26 (not a!22) (executed_0 id6 t8_invokeI))\n (and a!27 (not a!22) (executed_0 id7 t8_invokeI))\n (and a!28 (not a!29) (executed_0 id1 t8_invokeI))\n (and a!30 (not a!29) (executed_0 id2 t8_invokeI))\n (and a!31 (not a!29) (executed_0 id3 t8_invokeI))\n (and (not a!29) (executed_0 id4 t8_invokeI))\n (and a!32 (not a!29) (executed_0 id5 t8_invokeI))\n (and a!33 (not a!29) (executed_0 id6 t8_invokeI))\n (and a!34 (not a!29) (executed_0 id7 t8_invokeI))\n (and a!35 (not a!36) (executed_0 id1 t8_invokeI))\n (and a!37 (not a!36) (executed_0 id2 t8_invokeI))\n (and a!38 (not a!36) (executed_0 id3 t8_invokeI))\n (and a!39 (not a!36) (executed_0 id4 t8_invokeI))\n (and a!40 (not a!36) (executed_0 id5 t8_invokeI))\n (and (not a!36) (executed_0 id6 t8_invokeI))\n (and a!41 (not a!36) (executed_0 id7 t8_invokeI)))))))\n (a!2 (or (and (not (= x!0 Id!val!0))\n (executed_0 Id!val!0 Action!val!1))\n (and (not (= x!0 Id!val!1))\n (executed_0 Id!val!1 Action!val!1))\n (and (not (= x!0 Id!val!2))\n (executed_0 Id!val!2 Action!val!1))\n (and (not (= x!0 Id!val!3))\n (executed_0 Id!val!3 Action!val!1))\n (and (not (= x!0 Id!val!4))\n (executed_0 Id!val!4 Action!val!1))\n (and (not (= x!0 Id!val!5))\n (executed_0 Id!val!5 Action!val!1))\n (and (not (= x!0 Id!val!6))\n (executed_0 Id!val!6 Action!val!1))))\n (a!3 (or (and (not (= x!0 Id!val!0))\n (executed_0 Id!val!0 Action!val!4))\n (and (not (= x!0 Id!val!1))\n (executed_0 Id!val!1 Action!val!4))\n (and (not (= x!0 Id!val!2))\n (executed_0 Id!val!2 Action!val!4))\n (and (not (= x!0 Id!val!3))\n (executed_0 Id!val!3 Action!val!4))\n (and (not (= x!0 Id!val!4))\n (executed_0 Id!val!4 Action!val!4))\n (and (not (= x!0 Id!val!5))\n (executed_0 Id!val!5 Action!val!4))\n (and (not (= x!0 Id!val!6))\n (executed_0 Id!val!6 Action!val!4))))\n (a!4 (or (= x!0 Id!val!2)\n (= x!0 Id!val!1)\n (= x!0 Id!val!0)\n (= x!0 Id!val!6))))\n (or (and (= x!1 Action!val!8)\n (or (= x!0 Id!val!1) (= x!0 Id!val!0) (= x!0 Id!val!6))\n a!1)\n (and (= x!1 Action!val!5)\n (or (= x!0 Id!val!4)\n (= x!0 Id!val!3)\n (= x!0 Id!val!0)\n (= x!0 Id!val!6))\n a!2\n a!3)\n (and (= x!1 Action!val!4) (= x!0 Id!val!5) a!2)\n (and (= x!1 Action!val!7) a!4)\n (and (= x!1 Action!val!6) a!4)\n (and (= x!1 Action!val!1)\n (or (= x!0 Id!val!3) (= x!0 Id!val!0) (= x!0 Id!val!6)))\n (and (= x!1 Action!val!0) (= x!0 Id!val!5)))))\n (define-fun executed_1 ((x!0 Id) (x!1 Action)) Bool\n false)\n (define-fun can_exec_1 ((x!0 Id) (x!1 Action)) Bool\n (let ((a!1 (exists ((?W Role))\n (let ((a!1 (>= (+ (role_level Manager)\n (* (- 1) (role_level ?W)))\n 0))\n (a!2 (or (= Manager FinAdmin)\n (= id2 id7)\n (= id2 id1)\n (and (= id2 id3) (= Manager FinClerk))\n (and (= id2 id4) (= Manager POAdmin))\n (and (= id2 id5) (= Manager POClerk))\n (and (= id2 id6) (= Manager Client))))\n (a!3 (or (= Manager FinClerk)\n (= id3 id7)\n (= id3 id1)\n (and (= id3 id2) (= Manager FinAdmin))\n (and (= id3 id4) (= Manager POAdmin))\n (and (= id3 id5) (= Manager POClerk))\n (and (= id3 id6) (= Manager Client))))\n (a!4 (or (= Manager POAdmin)\n (= id4 id7)\n (= id4 id1)\n (and (= id4 id2) (= Manager FinAdmin))\n (and (= id4 id3) (= Manager FinClerk))\n (and (= id4 id5) (= Manager POClerk))\n (and (= id4 id6) (= Manager Client))))\n (a!5 (or (= Manager POClerk)\n (= id5 id7)\n (= id5 id1)\n (and (= id5 id2) (= Manager FinAdmin))\n (and (= id5 id3) (= Manager FinClerk))\n (and (= id5 id4) (= Manager POAdmin))\n (and (= id5 id6) (= Manager Client))))\n (a!6 (or (= Manager Client)\n (= id6 id7)\n (= id6 id1)\n (and (= id6 id2) (= Manager FinAdmin))\n (and (= id6 id3) (= Manager FinClerk))\n (and (= id6 id4) (= Manager POAdmin))\n (and (= id6 id5) (= Manager POClerk))))\n (a!7 (or (= POClerk Manager)\n (= id1 id5)\n (and (= id1 id7) (= POClerk Manager))\n (and (= id1 id2) (= POClerk FinAdmin))\n (and (= id1 id3) (= POClerk FinClerk))\n (and (= id1 id4) (= POClerk POAdmin))\n (and (= id1 id6) (= POClerk Client))))\n (a!8 (>= (+ (role_level POClerk)\n (* (- 1) (role_level ?W)))\n 0))\n (a!9 (or (= POClerk FinAdmin)\n (= id2 id5)\n (and (= id2 id7) (= POClerk Manager))\n (and (= id2 id1) (= POClerk Manager))\n (and (= id2 id3) (= POClerk FinClerk))\n (and (= id2 id4) (= POClerk POAdmin))\n (and (= id2 id6) (= POClerk Client))))\n (a!10 (or (= POClerk FinClerk)\n (= id3 id5)\n (and (= id3 id7) (= POClerk Manager))\n (and (= id3 id1) (= POClerk Manager))\n (and (= id3 id2) (= POClerk FinAdmin))\n (and (= id3 id4) (= POClerk POAdmin))\n (and (= id3 id6) (= POClerk Client))))\n (a!11 (or (= POClerk POAdmin)\n (= id4 id5)\n (and (= id4 id7) (= POClerk Manager))\n (and (= id4 id1) (= POClerk Manager))\n (and (= id4 id2) (= POClerk FinAdmin))\n (and (= id4 id3) (= POClerk FinClerk))\n (and (= id4 id6) (= POClerk Client))))\n (a!12 (or (= POClerk Client)\n (= id6 id5)\n (and (= id6 id7) (= POClerk Manager))\n (and (= id6 id1) (= POClerk Manager))\n (and (= id6 id2) (= POClerk FinAdmin))\n (and (= id6 id3) (= POClerk FinClerk))\n (and (= id6 id4) (= POClerk POAdmin))))\n (a!13 (or (= POClerk Manager)\n (= id7 id5)\n (and (= id7 id1) (= POClerk Manager))\n (and (= id7 id2) (= POClerk FinAdmin))\n (and (= id7 id3) (= POClerk FinClerk))\n (and (= id7 id4) (= POClerk POAdmin))\n (and (= id7 id6) (= POClerk Client))))\n (a!14 (or (= FinClerk Manager)\n (= id1 id3)\n (and (= id1 id7) (= FinClerk Manager))\n (and (= id1 id2) (= FinClerk FinAdmin))\n (and (= id1 id4) (= FinClerk POAdmin))\n (and (= id1 id5) (= FinClerk POClerk))\n (and (= id1 id6) (= FinClerk Client))))\n (a!15 (>= (+ (role_level FinClerk)\n (* (- 1) (role_level ?W)))\n 0))\n (a!16 (or (= FinClerk FinAdmin)\n (= id2 id3)\n (and (= id2 id7) (= FinClerk Manager))\n (and (= id2 id1) (= FinClerk Manager))\n (and (= id2 id4) (= FinClerk POAdmin))\n (and (= id2 id5) (= FinClerk POClerk))\n (and (= id2 id6) (= FinClerk Client))))\n (a!17 (or (= FinClerk POAdmin)\n (= id4 id3)\n (and (= id4 id7) (= FinClerk Manager))\n (and (= id4 id1) (= FinClerk Manager))\n (and (= id4 id2) (= FinClerk FinAdmin))\n (and (= id4 id5) (= FinClerk POClerk))\n (and (= id4 id6) (= FinClerk Client))))\n (a!18 (or (= FinClerk POClerk)\n (= id5 id3)\n (and (= id5 id7) (= FinClerk Manager))\n (and (= id5 id1) (= FinClerk Manager))\n (and (= id5 id2) (= FinClerk FinAdmin))\n (and (= id5 id4) (= FinClerk POAdmin))\n (and (= id5 id6) (= FinClerk Client))))\n (a!19 (or (= FinClerk Client)\n (= id6 id3)\n (and (= id6 id7) (= FinClerk Manager))\n (and (= id6 id1) (= FinClerk Manager))\n (and (= id6 id2) (= FinClerk FinAdmin))\n (and (= id6 id4) (= FinClerk POAdmin))\n (and (= id6 id5) (= FinClerk POClerk))))\n (a!20 (or (= FinClerk Manager)\n (= id7 id3)\n (and (= id7 id1) (= FinClerk Manager))\n (and (= id7 id2) (= FinClerk FinAdmin))\n (and (= id7 id4) (= FinClerk POAdmin))\n (and (= id7 id5) (= FinClerk POClerk))\n (and (= id7 id6) (= FinClerk Client))))\n (a!21 (or (= FinAdmin Manager)\n (= id1 id2)\n (and (= id1 id7) (= FinAdmin Manager))\n (and (= id1 id3) (= FinAdmin FinClerk))\n (and (= id1 id4) (= FinAdmin POAdmin))\n (and (= id1 id5) (= FinAdmin POClerk))\n (and (= id1 id6) (= FinAdmin Client))))\n (a!22 (>= (+ (role_level FinAdmin)\n (* (- 1) (role_level ?W)))\n 0))\n (a!23 (or (= FinAdmin FinClerk)\n (= id3 id2)\n (and (= id3 id7) (= FinAdmin Manager))\n (and (= id3 id1) (= FinAdmin Manager))\n (and (= id3 id4) (= FinAdmin POAdmin))\n (and (= id3 id5) (= FinAdmin POClerk))\n (and (= id3 id6) (= FinAdmin Client))))\n (a!24 (or (= FinAdmin POAdmin)\n (= id4 id2)\n (and (= id4 id7) (= FinAdmin Manager))\n (and (= id4 id1) (= FinAdmin Manager))\n (and (= id4 id3) (= FinAdmin FinClerk))\n (and (= id4 id5) (= FinAdmin POClerk))\n (and (= id4 id6) (= FinAdmin Client))))\n (a!25 (or (= FinAdmin POClerk)\n (= id5 id2)\n (and (= id5 id7) (= FinAdmin Manager))\n (and (= id5 id1) (= FinAdmin Manager))\n (and (= id5 id3) (= FinAdmin FinClerk))\n (and (= id5 id4) (= FinAdmin POAdmin))\n (and (= id5 id6) (= FinAdmin Client))))\n (a!26 (or (= FinAdmin Client)\n (= id6 id2)\n (and (= id6 id7) (= FinAdmin Manager))\n (and (= id6 id1) (= FinAdmin Manager))\n (and (= id6 id3) (= FinAdmin FinClerk))\n (and (= id6 id4) (= FinAdmin POAdmin))\n (and (= id6 id5) (= FinAdmin POClerk))))\n (a!27 (or (= FinAdmin Manager)\n (= id7 id2)\n (and (= id7 id1) (= FinAdmin Manager))\n (and (= id7 id3) (= FinAdmin FinClerk))\n (and (= id7 id4) (= FinAdmin POAdmin))\n (and (= id7 id5) (= FinAdmin POClerk))\n (and (= id7 id6) (= FinAdmin Client))))\n (a!28 (or (= POAdmin Manager)\n (= id1 id4)\n (and (= id1 id7) (= POAdmin Manager))\n (and (= id1 id2) (= POAdmin FinAdmin))\n (and (= id1 id3) (= POAdmin FinClerk))\n (and (= id1 id5) (= POAdmin POClerk))\n (and (= id1 id6) (= POAdmin Client))))\n (a!29 (>= (+ (role_level POAdmin)\n (* (- 1) (role_level ?W)))\n 0))\n (a!30 (or (= POAdmin FinAdmin)\n (= id2 id4)\n (and (= id2 id7) (= POAdmin Manager))\n (and (= id2 id1) (= POAdmin Manager))\n (and (= id2 id3) (= POAdmin FinClerk))\n (and (= id2 id5) (= POAdmin POClerk))\n (and (= id2 id6) (= POAdmin Client))))\n (a!31 (or (= POAdmin FinClerk)\n (= id3 id4)\n (and (= id3 id7) (= POAdmin Manager))\n (and (= id3 id1) (= POAdmin Manager))\n (and (= id3 id2) (= POAdmin FinAdmin))\n (and (= id3 id5) (= POAdmin POClerk))\n (and (= id3 id6) (= POAdmin Client))))\n (a!32 (or (= POAdmin POClerk)\n (= id5 id4)\n (and (= id5 id7) (= POAdmin Manager))\n (and (= id5 id1) (= POAdmin Manager))\n (and (= id5 id2) (= POAdmin FinAdmin))\n (and (= id5 id3) (= POAdmin FinClerk))\n (and (= id5 id6) (= POAdmin Client))))\n (a!33 (or (= POAdmin Client)\n (= id6 id4)\n (and (= id6 id7) (= POAdmin Manager))\n (and (= id6 id1) (= POAdmin Manager))\n (and (= id6 id2) (= POAdmin FinAdmin))\n (and (= id6 id3) (= POAdmin FinClerk))\n (and (= id6 id5) (= POAdmin POClerk))))\n (a!34 (or (= POAdmin Manager)\n (= id7 id4)\n (and (= id7 id1) (= POAdmin Manager))\n (and (= id7 id2) (= POAdmin FinAdmin))\n (and (= id7 id3) (= POAdmin FinClerk))\n (and (= id7 id5) (= POAdmin POClerk))\n (and (= id7 id6) (= POAdmin Client))))\n (a!35 (or (= Client Manager)\n (= id1 id6)\n (and (= id1 id7) (= Client Manager))\n (and (= id1 id2) (= Client FinAdmin))\n (and (= id1 id3) (= Client FinClerk))\n (and (= id1 id4) (= Client POAdmin))\n (and (= id1 id5) (= Client POClerk))))\n (a!36 (>= (+ (role_level Client)\n (* (- 1) (role_level ?W)))\n 0))\n (a!37 (or (= Client FinAdmin)\n (= id2 id6)\n (and (= id2 id7) (= Client Manager))\n (and (= id2 id1) (= Client Manager))\n (and (= id2 id3) (= Client FinClerk))\n (and (= id2 id4) (= Client POAdmin))\n (and (= id2 id5) (= Client POClerk))))\n (a!38 (or (= Client FinClerk)\n (= id3 id6)\n (and (= id3 id7) (= Client Manager))\n (and (= id3 id1) (= Client Manager))\n (and (= id3 id2) (= Client FinAdmin))\n (and (= id3 id4) (= Client POAdmin))\n (and (= id3 id5) (= Client POClerk))))\n (a!39 (or (= Client POAdmin)\n (= id4 id6)\n (and (= id4 id7) (= Client Manager))\n (and (= id4 id1) (= Client Manager))\n (and (= id4 id2) (= Client FinAdmin))\n (and (= id4 id3) (= Client FinClerk))\n (and (= id4 id5) (= Client POClerk))))\n (a!40 (or (= Client POClerk)\n (= id5 id6)\n (and (= id5 id7) (= Client Manager))\n (and (= id5 id1) (= Client Manager))\n (and (= id5 id2) (= Client FinAdmin))\n (and (= id5 id3) (= Client FinClerk))\n (and (= id5 id4) (= Client POAdmin))))\n (a!41 (or (= Client Manager)\n (= id7 id6)\n (and (= id7 id1) (= Client Manager))\n (and (= id7 id2) (= Client FinAdmin))\n (and (= id7 id3) (= Client FinClerk))\n (and (= id7 id4) (= Client POAdmin))\n (and (= id7 id5) (= Client POClerk)))))\n (and (or (and (= x!0 id7) (= ?W Manager))\n (and (= x!0 id1) (= ?W Manager))\n (and (= x!0 id2) (= ?W FinAdmin))\n (and (= x!0 id3) (= ?W FinClerk))\n (and (= x!0 id4) (= ?W POAdmin))\n (and (= x!0 id5) (= ?W POClerk))\n (and (= x!0 id6) (= ?W Client)))\n (or (and (not a!1) (executed_1 id1 t7_invokeO))\n (and a!2 (not a!1) (executed_1 id2 t7_invokeO))\n (and a!3 (not a!1) (executed_1 id3 t7_invokeO))\n (and a!4 (not a!1) (executed_1 id4 t7_invokeO))\n (and a!5 (not a!1) (executed_1 id5 t7_invokeO))\n (and a!6 (not a!1) (executed_1 id6 t7_invokeO))\n (and (not a!1) (executed_1 id7 t7_invokeO))\n (and a!7 (not a!8) (executed_1 id1 t7_invokeO))\n (and a!9 (not a!8) (executed_1 id2 t7_invokeO))\n (and a!10 (not a!8) (executed_1 id3 t7_invokeO))\n (and a!11 (not a!8) (executed_1 id4 t7_invokeO))\n (and (not a!8) (executed_1 id5 t7_invokeO))\n (and a!12 (not a!8) (executed_1 id6 t7_invokeO))\n (and a!13 (not a!8) (executed_1 id7 t7_invokeO))\n (and a!14 (not a!15) (executed_1 id1 t7_invokeO))\n (and a!16 (not a!15) (executed_1 id2 t7_invokeO))\n (and (not a!15) (executed_1 id3 t7_invokeO))\n (and a!17 (not a!15) (executed_1 id4 t7_invokeO))\n (and a!18 (not a!15) (executed_1 id5 t7_invokeO))\n (and a!19 (not a!15) (executed_1 id6 t7_invokeO))\n (and a!20 (not a!15) (executed_1 id7 t7_invokeO))\n (and a!21 (not a!22) (executed_1 id1 t7_invokeO))\n (and (not a!22) (executed_1 id2 t7_invokeO))\n (and a!23 (not a!22) (executed_1 id3 t7_invokeO))\n (and a!24 (not a!22) (executed_1 id4 t7_invokeO))\n (and a!25 (not a!22) (executed_1 id5 t7_invokeO))\n (and a!26 (not a!22) (executed_1 id6 t7_invokeO))\n (and a!27 (not a!22) (executed_1 id7 t7_invokeO))\n (and a!28 (not a!29) (executed_1 id1 t7_invokeO))\n (and a!30 (not a!29) (executed_1 id2 t7_invokeO))\n (and a!31 (not a!29) (executed_1 id3 t7_invokeO))\n (and (not a!29) (executed_1 id4 t7_invokeO))\n (and a!32 (not a!29) (executed_1 id5 t7_invokeO))\n (and a!33 (not a!29) (executed_1 id6 t7_invokeO))\n (and a!34 (not a!29) (executed_1 id7 t7_invokeO))\n (and a!35 (not a!36) (executed_1 id1 t7_invokeO))\n (and a!37 (not a!36) (executed_1 id2 t7_invokeO))\n (and a!38 (not a!36) (executed_1 id3 t7_invokeO))\n (and a!39 (not a!36) (executed_1 id4 t7_invokeO))\n (and a!40 (not a!36) (executed_1 id5 t7_invokeO))\n (and (not a!36) (executed_1 id6 t7_invokeO))\n (and a!41 (not a!36) (executed_1 id7 t7_invokeO)))\n (or (and (not a!1) (executed_1 id1 t8_invokeI))\n (and a!2 (not a!1) (executed_1 id2 t8_invokeI))\n (and a!3 (not a!1) (executed_1 id3 t8_invokeI))\n (and a!4 (not a!1) (executed_1 id4 t8_invokeI))\n (and a!5 (not a!1) (executed_1 id5 t8_invokeI))\n (and a!6 (not a!1) (executed_1 id6 t8_invokeI))\n (and (not a!1) (executed_1 id7 t8_invokeI))\n (and a!7 (not a!8) (executed_1 id1 t8_invokeI))\n (and a!9 (not a!8) (executed_1 id2 t8_invokeI))\n (and a!10 (not a!8) (executed_1 id3 t8_invokeI))\n (and a!11 (not a!8) (executed_1 id4 t8_invokeI))\n (and (not a!8) (executed_1 id5 t8_invokeI))\n (and a!12 (not a!8) (executed_1 id6 t8_invokeI))\n (and a!13 (not a!8) (executed_1 id7 t8_invokeI))\n (and a!14 (not a!15) (executed_1 id1 t8_invokeI))\n (and a!16 (not a!15) (executed_1 id2 t8_invokeI))\n (and (not a!15) (executed_1 id3 t8_invokeI))\n (and a!17 (not a!15) (executed_1 id4 t8_invokeI))\n (and a!18 (not a!15) (executed_1 id5 t8_invokeI))\n (and a!19 (not a!15) (executed_1 id6 t8_invokeI))\n (and a!20 (not a!15) (executed_1 id7 t8_invokeI))\n (and a!21 (not a!22) (executed_1 id1 t8_invokeI))\n (and (not a!22) (executed_1 id2 t8_invokeI))\n (and a!23 (not a!22) (executed_1 id3 t8_invokeI))\n (and a!24 (not a!22) (executed_1 id4 t8_invokeI))\n (and a!25 (not a!22) (executed_1 id5 t8_invokeI))\n (and a!26 (not a!22) (executed_1 id6 t8_invokeI))\n (and a!27 (not a!22) (executed_1 id7 t8_invokeI))\n (and a!28 (not a!29) (executed_1 id1 t8_invokeI))\n (and a!30 (not a!29) (executed_1 id2 t8_invokeI))\n (and a!31 (not a!29) (executed_1 id3 t8_invokeI))\n (and (not a!29) (executed_1 id4 t8_invokeI))\n (and a!32 (not a!29) (executed_1 id5 t8_invokeI))\n (and a!33 (not a!29) (executed_1 id6 t8_invokeI))\n (and a!34 (not a!29) (executed_1 id7 t8_invokeI))\n (and a!35 (not a!36) (executed_1 id1 t8_invokeI))\n (and a!37 (not a!36) (executed_1 id2 t8_invokeI))\n (and a!38 (not a!36) (executed_1 id3 t8_invokeI))\n (and a!39 (not a!36) (executed_1 id4 t8_invokeI))\n (and a!40 (not a!36) (executed_1 id5 t8_invokeI))\n (and (not a!36) (executed_1 id6 t8_invokeI))\n (and a!41 (not a!36) (executed_1 id7 t8_invokeI)))))))\n (a!2 (or (= x!0 Id!val!2)\n (= x!0 Id!val!1)\n (= x!0 Id!val!0)\n (= x!0 Id!val!6)))\n (a!3 (or (and (not (= x!0 Id!val!0))\n (executed_1 Id!val!0 Action!val!1))\n (and (not (= x!0 Id!val!1))\n (executed_1 Id!val!1 Action!val!1))\n (and (not (= x!0 Id!val!2))\n (executed_1 Id!val!2 Action!val!1))\n (and (not (= x!0 Id!val!3))\n (executed_1 Id!val!3 Action!val!1))\n (and (not (= x!0 Id!val!4))\n (executed_1 Id!val!4 Action!val!1))\n (and (not (= x!0 Id!val!5))\n (executed_1 Id!val!5 Action!val!1))\n (and (not (= x!0 Id!val!6))\n (executed_1 Id!val!6 Action!val!1))))\n (a!4 (or (and (not (= x!0 Id!val!0))\n (executed_1 Id!val!0 Action!val!4))\n (and (not (= x!0 Id!val!1))\n (executed_1 Id!val!1 Action!val!4))\n (and (not (= x!0 Id!val!2))\n (executed_1 Id!val!2 Action!val!4))\n (and (not (= x!0 Id!val!3))\n (executed_1 Id!val!3 Action!val!4))\n (and (not (= x!0 Id!val!4))\n (executed_1 Id!val!4 Action!val!4))\n (and (not (= x!0 Id!val!5))\n (executed_1 Id!val!5 Action!val!4))\n (and (not (= x!0 Id!val!6))\n (executed_1 Id!val!6 Action!val!4)))))\n (or (and (= x!1 Action!val!8)\n (or (= x!0 Id!val!1) (= x!0 Id!val!0) (= x!0 Id!val!6))\n a!1)\n (and (= x!1 Action!val!7) a!2)\n (and (= x!1 Action!val!6) a!2)\n (and (= x!1 Action!val!1)\n (or (= x!0 Id!val!3) (= x!0 Id!val!0) (= x!0 Id!val!6)))\n (and (= x!1 Action!val!0) (= x!0 Id!val!5))\n (and (= x!1 Action!val!5)\n (or (= x!0 Id!val!4)\n (= x!0 Id!val!3)\n (= x!0 Id!val!0)\n (= x!0 Id!val!6))\n a!3\n a!4)\n (and (= x!1 Action!val!4) (= x!0 Id!val!5) a!3))))\n (define-fun role_le ((x!0 Role) (x!1 Role)) Bool\n (let ((a!1 (>= (+ (role_level x!0) (* (- 1) (role_level x!1))) 0)))\n (not a!1)))\n (define-fun role_permission_assign ((x!0 Role) (x!1 Permission)) Bool\n (or (and (= x!0 Role!val!0)\n (or (= x!1 Permission!val!4)\n (= x!1 Permission!val!0)\n (= x!1 Permission!val!3)\n (= x!1 Permission!val!2)))\n (and (= x!0 Role!val!1)\n (or (= x!1 Permission!val!3) (= x!1 Permission!val!4)))\n (and (= x!0 Role!val!5)\n (or (= x!1 Permission!val!1) (= x!1 Permission!val!5)))\n (and (= x!0 Role!val!3)\n (or (= x!1 Permission!val!0) (= x!1 Permission!val!2)))\n (and (= x!0 Role!val!2) (= x!1 Permission!val!3))\n (and (= x!0 Role!val!4) (= x!1 Permission!val!2))))\n (define-fun user ((x!0 Id)) Bool\n false)\n (define-fun t3_split_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t2_invoke_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t5_invoke_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t4_join_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t7_invokeO_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t9_invoke_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t8_invokeI_0_1 ((x!0 Id)) Bool\n false)\n (define-fun role ((x!0 Role)) Bool\n false)\n (define-fun t6_invoke_0_1 ((x!0 Id)) Bool\n false)\n)\n",error:"",status:"z3-ran",hash:"af6a70cefc3dba8098cbe4a89af3b722698976d0"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"It is very effective in this benchmark since it contains many quantifiers of the form"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"forall x. p(x) = ....")),(0,i.kt)("p",null,"The Z3 model finder is more effective if the input formula does not contain nested quantifiers. If that is not the case for your formula, you can use the option"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"(set-option :smt.pull-nested-quantifiers true)")),(0,i.kt)("p",null,"The following challenge problem from the paper ",(0,i.kt)("a",{parentName:"p",href:"https://www.ijcai.org/Proceedings/95-1/Papers/039.pdf"},"SEM a system for enumerating models")," is proved to be unsatisfiable in less than one second by Z3."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(declare-sort S)\n(declare-fun g (S S) S)\n(declare-fun f (S S) S)\n(declare-const a S)\n(declare-const b S)\n\n(assert (forall ((x S) (y S))\n (= (g (f x y) (f x x)) x)))\n(assert (forall ((x S) (y S))\n (= (f (g x y) (g x x)) x)))\n(assert (forall ((x S) (y S) (z S))\n (= (g (g x y) z) (g (g y z) x))))\n(assert (forall ((x S) (y S) (z S))\n (= (f (f x y) z) (f (f y z) x))))\n(assert (distinct (g a (f b a)) (f a (g b a))))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"413a91abce2055a09d7b92f30fc44306ed6ab8bf"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Quantifier reasoning is undecidable. Z3 attempts to find a refutation or a finite model\nof quantified formulas. When formulas are satisfiable but have no finite models, z3 will\nlikely diverge. The following example illustrates a formula that only has infinite models.")),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(declare-sort S)\n(declare-fun g (S) S)\n(declare-fun f (S) S)\n(declare-const a S)\n(assert (forall ((x S)) (= (g (f x)) x)))\n(assert (forall ((x S)) (not (= a (f x)))))\n(check-sat)\n(get-model)",result:{output:"",error:"",status:"z3-ran",hash:"f2ec0485fd2506523e58a8b628c9647616e5484d"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}x.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0a1ab64f.e9ea4dcf.js b/assets/js/0a1ab64f.e9ea4dcf.js new file mode 100644 index 000000000..3f4d7e53a --- /dev/null +++ b/assets/js/0a1ab64f.e9ea4dcf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1649],{1245:(n,e,a)=>{a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>s,toc:()=>v});var t=a(7462),i=(a(7294),a(3905)),r=a(7634),d=a.n(r);const o={title:"Quantifiers",sidebar_position:5},l=void 0,s={unversionedId:"logic/Quantifiers",id:"logic/Quantifiers",title:"Quantifiers",description:"Z3 is a decision procedure for the combination of the previous quantifier-free theories. That is, it can answer whether a quantifier-free formula, modulo the theories referenced by the formula, is satisfiable or whether it is unsatisfiable. Z3 also accepts and can work with formulas that use quantifiers. It is no longer a decision procedure for such formulas in general (and for good reasons, as there can be no decision procedure for first-order logic).",source:"@site/docs-smtlib/01 - logic/05 - Quantifiers.md",sourceDirName:"01 - logic",slug:"/logic/Quantifiers",permalink:"/z3guide/docs/logic/Quantifiers",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/05 - Quantifiers.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Quantifiers",sidebar_position:5},sidebar:"smtlibSidebar",previous:{title:"Uninterpreted Functions and Constants",permalink:"/z3guide/docs/logic/Uninterpreted-functions-and-constants"},next:{title:"Lambdas",permalink:"/z3guide/docs/logic/Lambdas"}},u={},v=[{value:"Modeling with Quantifiers",id:"modeling-with-quantifiers",level:3},{value:"Patterns",id:"patterns",level:3},{value:"Multi-patterns",id:"multi-patterns",level:3},{value:"No patterns",id:"no-patterns",level:3},{value:"Model-based Quantifier Instantiation",id:"model-based-quantifier-instantiation",level:3},{value:"Effectively Propositional",id:"effectively-propositional",level:4},{value:"Stratified Sorts Fragment",id:"stratified-sorts-fragment",level:4},{value:"Array Property Fragment",id:"array-property-fragment",level:4},{value:"List Fragment",id:"list-fragment",level:4},{value:"Essentially (Almost) Uninterpreted Fragment",id:"essentially-almost-uninterpreted-fragment",level:4},{value:"Quantified Bit-Vector Formulas",id:"quantified-bit-vector-formulas",level:4},{value:"Conditional (and Pseudo) Macros",id:"conditional-and-pseudo-macros",level:4},{value:"My formula is not in any of the fragments above",id:"my-formula-is-not-in-any-of-the-fragments-above",level:4}],_={toc:v};function x(n){let{components:e,...a}=n;return(0,i.kt)("wrapper",(0,t.Z)({},_,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Z3 is a ",(0,i.kt)("a",{parentName:"p",href:"http://www.decision-procedures.org/"},(0,i.kt)("em",{parentName:"a"},"decision procedure"))," for the combination of the previous quantifier-free theories. That is, it can answer whether a quantifier-free formula, modulo the theories referenced by the formula, is satisfiable or whether it is unsatisfiable. Z3 also accepts and can work with formulas that use quantifiers. It is no longer a decision procedure for such formulas in general (and for good reasons, as there can be no decision procedure for first-order logic)."),(0,i.kt)("p",null,"Nevertheless, Z3 is often able to handle formulas involving quantifiers. It uses several approaches to handle quantifiers. The most prolific approach is using ",(0,i.kt)("em",{parentName:"p"},"pattern-based")," quantifier instantiation. This approach allows instantiating quantified formulas with ground terms that appear in the current search context based on ",(0,i.kt)("em",{parentName:"p"},"pattern annotations")," on quantifiers. The pattern-based instantiation method is quite effective, even though it is inherently incomplete. "),(0,i.kt)("p",null,"Z3 also contains a model-based quantifier instantiation component that uses a model construction to find good terms to instantiate quantifiers with; and Z3 also handles many decidable fragments."),(0,i.kt)("h3",{id:"modeling-with-quantifiers"},"Modeling with Quantifiers"),(0,i.kt)("p",null,"Suppose we want to model an object oriented type system with single inheritance. We would need a predicate for sub-typing. Sub-typing should be a partial order, and respect single inheritance. For some built-in type constructors, such as for array-of, sub-typing should be monotone."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort Type)\n(declare-fun subtype (Type Type) Bool)\n(declare-fun array-of (Type) Type)\n(assert (forall ((x Type)) (subtype x x)))\n(assert (forall ((x Type) (y Type) (z Type))\n (= (and (subtype x y) (subtype y z)) \n (subtype x z)))) \n(assert (forall ((x Type) (y Type))\n (= (and (subtype x y) (subtype y x)) \n (= x y))))\n(assert (forall ((x Type) (y Type) (z Type))\n (= (and (subtype x y) (subtype x z)) \n (or (subtype y z) (subtype z y))))) \n(assert (forall ((x Type) (y Type))\n (= (subtype x y) \n (subtype (array-of x) (array-of y)))))\n(declare-const root-type Type)\n(assert (forall ((x Type)) (subtype x root-type)))\n(check-sat)",result:{output:"sat\n",error:"",status:"z3-ran",hash:"66d69453fb13bf78248eff80b791b366fc99ec64"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Raymond Smullyan's puzzles are famous logical brain teasers. You can use predicate logic to encode and solve these.\nOn a fictional island, all inhabitants are either knights, who always tell the truth, or knaves, who always lie.\nJohn and Bill are residents of the island of knights and knaves."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort Inhabitant)\n(declare-datatype Statement (truth falsity))\n(declare-datatype Identity (Knave Knight))\n(declare-const John Inhabitant)\n(declare-const Bill Inhabitant)\n(declare-fun Is (Inhabitant Identity) Statement)\n(declare-fun Says (Inhabitant Statement) Bool)\n(declare-fun Holds (Statement) Bool)\n(assert (Holds truth))\n(assert (not (Holds falsity)))\n(assert (forall ((x Inhabitant)) (xor (Holds (Is x Knave)) (Holds (Is x Knight)))))\n(assert (forall ((x Inhabitant) (y Statement)) (=> (Holds (Is x Knave)) (Says x y) (not (Holds y)))))\n(assert (forall ((x Inhabitant) (y Statement)) (=> (Holds (Is x Knight)) (Says x y) (Holds y))))\n\n; Question 1\n; John says: We are both knaves\n; Who is what?\n\n(push)\n(declare-fun And (Statement Statement) Statement)\n(assert (forall ((x Statement) (y Statement)) (= (Holds (And x y)) (and (Holds x) (Holds y)))))\n(assert (Says John (And (Is John Knave) (Is Bill Knave))))\n(check-sat)\n(eval (Holds (Is John Knight)))\n(eval (Holds (Is Bill Knight)))\n(pop)\n\n\n; Question 2\n; John: If (and only if) Bill is a knave, then I am a knave.\n; Bill: We are of different kinds.\n; Who is who?\n\n(push)\n\n(declare-fun Not (Statement) Statement)\n(declare-fun Iff (Statement Statement) Statement)\n(assert (forall ((x Statement)) (= (Holds (Not x)) (not (Holds x)))))\n(assert (forall ((x Statement) (y Statement)) (= (Holds (Iff x y)) (= (Holds x) (Holds y)))))\n\n(assert (Says John (Iff (Is Bill Knave) (Is John Knave))))\n(assert (Says Bill (Not (Iff (Is Bill Knave) (Is John Knave)))))\n(check-sat)\n(eval (Holds (Is John Knight)))\n(eval (Holds (Is Bill Knight)))\n(pop)\n",result:{output:"sat\nfalse\ntrue\nsat\nfalse\ntrue\n",error:"",status:"z3-ran",hash:"a6418913ca0be86f12596a4d32eb51c9bb96e372"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Another related Smullyan puzzle asks\nJohn and Bill are standing at a fork in the road. You know that one of\nthem is a knight and the other a knave, but you don't know which.\nYou also know that one road leads to Death, and the other leads to Freedom.\nBy asking one yes/no question, can you determine the road to Freedom?\nWe leave solving this puzzle as an exercise. You can either provide a direct answer and check it,\nor create a search space of abstract syntax, create an interpreter for the syntax and have z3\nsearch for the question."),(0,i.kt)("h3",{id:"patterns"},"Patterns"),(0,i.kt)("p",null,"The Stanford Pascal verifier and the subsequent Simplify theorem prover pioneered the use of pattern-based quantifier instantiation. The basic idea behind pattern-based quantifier instantiation is in a sense straight-forward. Annotate a quantified formula using a ",(0,i.kt)("em",{parentName:"p"},"pattern")," that contains all the bound variables. So a pattern is an expression (that does not contain binding operations, such as quantifiers) that contains variables bound by a quantifier. Then instantiate the quantifier whenever a term that matches the pattern is created during search. This is a conceptually easy starting point, but there are several subtleties that are important."),(0,i.kt)("p",null,"In the following example, the first two options make sure that Model-based quantifier instantiation and saturation engines are disabled. We also annotate the quantified formula with the pattern (f (g x)). Since there is no ground instance of this pattern, the quantifier is not instantiated, and Z3 fails to show that the formula is unsatisfiable."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.auto-config false) ; disable automatic self configuration\n(set-option :smt.mbqi false) ; disable model-based quantifier instantiation\n(declare-fun f (Int) Int)\n(declare-fun g (Int) Int)\n(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (forall ((x Int))\n (! (= (f (g x)) x)\n :pattern ((f (g x))))))\n(assert (= (g a) c))\n(assert (= (g b) c))\n(assert (not (= a b)))\n(check-sat)",result:{output:"unknown\n",error:"",status:"z3-ran",hash:"fa455214b73936f55c70bda6c1092f31d186b494"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"When the more permissive pattern (g x) is used. Z3 proves the formula to be unsatisfiable. More restrictive patterns minimize the number of instantiations (and potentially improve performance), but they may also make Z3 less complete."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.auto-config false) ; disable automatic self configuration\n(set-option :smt.mbqi false) ; disable model-based quantifier instantiation\n(declare-fun f (Int) Int)\n(declare-fun g (Int) Int)\n(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (forall ((x Int))\n (! (= (f (g x)) x)\n :pattern ((g x)))))\n(assert (= (g a) c))\n(assert (= (g b) c))\n(assert (not (= a b)))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"a7a0bb885d583330ec198e7d172476b149371bae"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Some patterns may also create long instantiation chains. Consider the following assertion."),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"(assert (forall (x Type) (y Type)\n(! (= (subtype x y) (subtype (array-of x) (array-of y)))\n:pattern ((subtype x y))\n))")),(0,i.kt)("p",null,"The axiom gets instantiated whenever there is some ground term of the form (subtype s t). The instantiation causes a fresh ground term (subtype (array-of s) (array-of t)), which enables a new instantiation. This undesirable situation is called a matching loop. Z3 uses many heuristics to break matching loops."),(0,i.kt)("p",null,"Before elaborating on the subtleties, we should address an important first question. What defines the terms that are created during search? In the context of most SMT solvers, and of the Simplify theorem prover, terms exist as part of the input formula, they are of course also created by instantiating quantifiers, but terms are also implicitly created when equalities are asserted. The last point means that terms are considered up to congruence and pattern matching takes place modulo ground equalities. We call the matching problem E-matching. For example, if we have the following equalities"),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.auto-config false) ; disable automatic self configuration\n(set-option :smt.mbqi false) ; disable model-based quantifier instantiation\n(declare-fun f (Int) Int)\n(declare-fun g (Int) Int)\n(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (forall ((x Int))\n (! (= (f (g x)) x)\n :pattern ((f (g x))))))\n(assert (= a (g b)))\n(assert (= b c))\n(assert (not (= (f a) c)))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"f2e9b0215ad3baf1ba54d43cb0cadee036e5b560"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The terms (f a) and (f (g b)) are equal modulo the equalities. The pattern (f (g x)) can be matched and x bound to b (and the equality (= (f (g b)) b) is deduced."),(0,i.kt)("p",null,"While E-matching is an NP-complete problem, the main sources of overhead in larger verification problems comes from matching thousands of patterns in the context of an evolving set of terms and equalities. Z3 integrates an efficient E-matching engine using term indexing techniques."),(0,i.kt)("h3",{id:"multi-patterns"},"Multi-patterns"),(0,i.kt)("p",null,"In some cases, there is no pattern that contains all bound variables and does not contain interpreted symbols. In these cases, we use multi-patterns. In the following example, the quantified formula states that f is injective. This quantified formula is annotated with the multi-pattern (f x) (f y)"),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort A)\n(declare-sort B)\n(declare-fun f (A) B)\n(assert (forall ((x A) (y A))\n (! (= (= (f x) (f y)) (= x y))\n :pattern ((f x) (f y))\n )))\n(declare-const a1 A)\n(declare-const a2 A)\n(declare-const b B)\n(assert (not (= a1 a2)))\n(assert (= (f a1) b))\n(assert (= (f a2) b))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"96f3ab86a6eb6a04085b6a97fc57cf321eb0f946"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The quantified formula is instantiated for every pair of occurrences of f. A simple trick allows formulating injectivity of f in such a way that only a linear number of instantiations is required. The trick is to realize that f is injective if and only if it has a partial inverse."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-sort A)\n(declare-sort B)\n(declare-fun f (A) B)\n(declare-fun f-inv (B) A)\n(assert (forall ((x A))\n (! (= (f-inv (f x)) x)\n :pattern ((f x))\n )))\n(declare-const a1 A)\n(declare-const a2 A)\n(declare-const b B)\n(assert (not (= a1 a2)))\n(assert (= (f a1) b))\n(assert (= (f a2) b))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"57ebf8be33053a4b62d1c6deeb94fac3dc026b0e"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"no-patterns"},"No patterns"),(0,i.kt)("p",null,"The annotation no-pattern can be used to instrument Z3 not to use a certain sub-expression as a pattern. The pattern inference engine may otherwise choose arbitrary sub-expressions as patterns to direct quantifier instantiation."),(0,i.kt)("h3",{id:"model-based-quantifier-instantiation"},"Model-based Quantifier Instantiation"),(0,i.kt)("p",null,"The model-based quantifier instantiation (MBQI) is essentially a counter-example based refinement loop, where candidate models are built and checked. When the model checking step fails, it creates new quantifier instantiations. The models are returned as simple functional programs. In the following example, the model provides an interpretation for function f and constants a and b. One can easily check that the returned model does indeed satisfy the quantifier."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(declare-fun f (Int Int) Int)\n(declare-const a Int)\n(declare-const b Int)\n\n(assert (forall ((x Int)) (= (f x x) (+ x a))))\n\n(assert (< (f a b) a))\n(assert (< a 0))\n(check-sat)\n(get-model)\n\n(echo "evaluating (f (+ a 10) 20)...")\n(eval (f (+ a 10) 20))',result:{output:"sat\n(\n (define-fun b () Int\n 0)\n (define-fun a () Int\n (- 1))\n (define-fun f ((x!0 Int) (x!1 Int)) Int\n (ite (and (= x!0 (- 1)) (= x!1 0)) (- 2)\n (+ (- 1) x!0)))\n)\nevaluating (f (+ a 10) 20)...\n8\n",error:"",status:"z3-ran",hash:"cfa8d4fa9a231af271ed436895d834c5afadeec6"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The command eval evaluates an expression in the last model produced by Z3. It is essentially executing the function program produced by Z3."),(0,i.kt)("p",null,"MBQI is a decision procedure for several useful fragments. It may find models even for formulas that are not in any of these fragments. We describe some of these fragments."),(0,i.kt)("h4",{id:"effectively-propositional"},"Effectively Propositional"),(0,i.kt)("p",null,"The effectively propositional class of formulas (aka The Bernays-Schonfinkel class) is a decidable fragment of first-order logic formulas. It corresponds to formulas which, when written in prenex normal form contain only constants, universal quantifiers, and functions that return Boolean values (aka predicates)."),(0,i.kt)("p",null,"Problems arising from program verification often involve establishing facts of quantifier-free formulas, but the facts themselves use relations and functions that are conveniently axiomatized using a background theory that uses quantified formulas. One set of examples of this situation comprise of formulas involving partial-orders. The following example axiomatizes a subtype partial order relation that has the tree property. That is, if x and y are subtypes of z, then x is a subtype of y or y is a subtype of x. The option (set-option :model.compact true) instructs Z3 to eliminate trivial redundancies from the generated model. In this example, Z3 also creates a finite interpretation for the uninterpreted sort T."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(set-option :model.compact true)\n\n;; T is an uninterpreted sort\n(declare-sort T) \n\n(declare-fun subtype (T T) Bool)\n\n;; subtype is reflexive\n(assert (forall ((x T)) (subtype x x)))\n\n;; subtype is antisymmetric\n(assert (forall ((x T) (y T)) (=> (and (subtype x y)\n (subtype y x))\n (= x y))))\n;; subtype is transitive\n(assert (forall ((x T) (y T) (z T)) (=> (and (subtype x y)\n (subtype y z))\n (subtype x z))))\n;; subtype has the tree-property\n(assert (forall ((x T) (y T) (z T)) (=> (and (subtype x z)\n (subtype y z))\n (or (subtype x y)\n (subtype y x)))))\n\n;; now we define a simple example using the axiomatization above.\n(declare-const obj-type T)\n(declare-const int-type T)\n(declare-const real-type T)\n(declare-const complex-type T)\n(declare-const string-type T)\n\n;; we have an additional axiom: every type is a subtype of obj-type\n(assert (forall ((x T)) (subtype x obj-type)))\n\n(assert (subtype int-type real-type))\n(assert (subtype real-type complex-type))\n(assert (not (subtype string-type real-type)))\n(declare-const root-type T)\n(assert (subtype obj-type root-type))\n(check-sat)\n(get-model)\n\n(echo "Is int-type a subtype of complex-type?")\n(eval (subtype int-type complex-type))\n(echo "Is int-type = obj-type?")\n(eval (= int-type obj-type))\n(echo "Is int-type a subtype of root-type?")\n(eval (subtype int-type root-type))\n(echo "Is root-type = obj-type?")\n(eval (= root-type obj-type))',result:{output:"sat\n(\n ;; universe for T:\n ;; T!val!3 T!val!4 T!val!0 T!val!2 T!val!1 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun T!val!3 () T)\n (declare-fun T!val!4 () T)\n (declare-fun T!val!0 () T)\n (declare-fun T!val!2 () T)\n (declare-fun T!val!1 () T)\n ;; cardinality constraint:\n (forall ((x T))\n (or (= x T!val!3)\n (= x T!val!4)\n (= x T!val!0)\n (= x T!val!2)\n (= x T!val!1)))\n ;; -----------\n (define-fun string-type () T\n T!val!3)\n (define-fun int-type () T\n T!val!0)\n (define-fun complex-type () T\n T!val!2)\n (define-fun real-type () T\n T!val!1)\n (define-fun obj-type () T\n T!val!4)\n (define-fun root-type () T\n T!val!4)\n (define-fun subtype ((x!0 T) (x!1 T)) Bool\n (or (and (= x!0 T!val!2)\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (not (= x!1 T!val!0))\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!2)\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!2)\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!1)\n (not (= x!0 T!val!4))\n (not (= x!1 T!val!0))\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (not (= x!1 T!val!0))\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!0)\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (not (= x!0 T!val!0))\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (not (= x!1 T!val!0))\n (not (= x!1 T!val!2))\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (not (= x!0 T!val!0))\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!4))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!4))\n (and (= x!0 T!val!1)\n (not (= x!0 T!val!4))\n (= x!1 T!val!2)\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!1)\n (not (= x!0 T!val!4))\n (= x!1 T!val!1)\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!2)\n (not (= x!1 T!val!1))\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!1) (not (= x!0 T!val!4)) (= x!1 T!val!4))\n (and (= x!0 T!val!0)\n (not (= x!0 T!val!2))\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!1)\n (not (= x!1 T!val!4)))\n (and (= x!0 T!val!2)\n (not (= x!0 T!val!1))\n (not (= x!0 T!val!4))\n (= x!1 T!val!4))\n (and (= x!0 T!val!4) (= x!1 T!val!4))))\n)\nIs int-type a subtype of complex-type?\ntrue\nIs int-type = obj-type?\nfalse\nIs int-type a subtype of root-type?\ntrue\nIs root-type = obj-type?\ntrue\n",error:"",status:"z3-ran",hash:"0cfbe9c30c719a221b90b1a187197d3f001653fc"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Note that it uses two auxiliary functions (subtype!25 and k!24) that were not part of your formula. They are auxiliary definitions created by Z3 during the model construction procedure. We can also ask questions by using the eval command. For example,"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"(eval (subtype int-type complex-type))")),(0,i.kt)("p",null,"executes (evaluates) the given expression using the produced functional program (model)."),(0,i.kt)("p",null,"Constraints over sets (Boolean Algebras) can be encoded into this fragment by treating sets as unary predicates and lifting equalities between sets as formula equivalence."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(set-option :model.compact true)\n\n;; A, B, C and D are sets of Int\n(declare-fun A (Int) Bool)\n(declare-fun B (Int) Bool)\n(declare-fun C (Int) Bool)\n(declare-fun D (Int) Bool)\n\n;; A union B is a subset of C\n(assert (forall ((x Int)) (=> (or (A x) (B x)) (C x))))\n\n;; B minus A is not empty\n;; That is, there exists an integer e that is B but not in A\n(declare-const e Int)\n(assert (and (B e) (not (A e))))\n\n;; D is equal to C\n(assert (forall ((x Int)) (iff (D x) (C x))))\n\n;; 0, 1 and 2 are in B\n(assert (B 0))\n(assert (B 1))\n(assert (B 2))\n\n(check-sat)\n(get-model)\n(echo "Is e an element of D?")\n(eval (D e))\n\n(echo "Now proving that A is a strict subset of D")\n;; This is true if the negation is unsatisfiable\n(push)\n(assert (not (and \n ;; A is a subset of D\n (forall ((x Int)) (=> (A x) (D x)))\n ;; but, D has an element that is not in A.\n (exists ((x Int)) (and (D x) (not (A x)))))))\n(check-sat)\n(pop)',result:{output:"sat\n(\n (define-fun e () Int\n 3)\n (define-fun B ((x!0 Int)) Bool\n (or (and (not (= x!0 1)) (not (= x!0 3)) (not (= x!0 0)))\n (and (not (= x!0 1)) (= x!0 3))\n (and (not (= x!0 1)) (not (= x!0 3)) (= x!0 0))\n (= x!0 1)))\n (define-fun A ((x!0 Int)) Bool\n false)\n (define-fun C ((x!0 Int)) Bool\n (or (and (not (= x!0 1)) (not (= x!0 3)) (not (= x!0 0)))\n (and (not (= x!0 1)) (= x!0 3))\n (and (not (= x!0 1)) (not (= x!0 3)) (= x!0 0))\n (= x!0 1)))\n (define-fun D ((x!0 Int)) Bool\n (ite (= x!0 3) true\n (ite (= x!0 0) true\n (ite (= x!0 1) true\n (ite (= x!0 2) true\n (C x!0))))))\n)\nIs e an element of D?\ntrue\nNow proving that A is a strict subset of D\nunsat\n",error:"",status:"z3-ran",hash:"65178e72c68ccb235b1b0d9f4692596621098676"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"stratified-sorts-fragment"},"Stratified Sorts Fragment"),(0,i.kt)("p",null,"The stratified sorts fragment is another decidable fragment of many sorted first-order logic formulas. It corresponds to formulas which, when written in prenex normal form, there is a function level from sorts to naturals, and for every function"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"declare-fun f (S_1 ... S_n) R)"),(0,i.kt)("p",{parentName:"blockquote"},"level(R) level(S_i).")),(0,i.kt)("h4",{id:"array-property-fragment"},"Array Property Fragment"),(0,i.kt)("p",null,"The array property fragment can encode properties about uni-dimensional, and is strong enough to say an array is sorted. More information about this fragment can be found in the paper ",(0,i.kt)("a",{parentName:"p",href:"https://theory.stanford.edu/~arbrad/papers/arrays.pdf"},"What's Decidable About Arrays"),"."),(0,i.kt)("p",null,"(set-option :smt.mbqi true)\n(set-option :model.compact true)"),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(set-option :model.compact true)\n\n;; A0, A1, A2, A3, A4 are "arrays" from Integers to Integers.\n(declare-fun A0 (Int) Int) (declare-fun A1 (Int) Int)\n(declare-fun A2 (Int) Int) (declare-fun A3 (Int) Int)\n(declare-fun A4 (Int) Int) \n(declare-const n Int) (declare-const l Int)\n(declare-const k Int) (declare-const x Int)\n(declare-const y Int) (declare-const w Int)\n(declare-const z Int)\n\n;; A1 = A0[k <- w]\n(assert (= (A1 k) w))\n(assert (forall ((x Int)) (or (= x k) (= (A1 x) (A0 x)))))\n\n;; A2 = A1[l <- x] = A0[k <- w][l <- x]\n(assert (= (A2 l) x))\n(assert (forall ((x Int)) (or (= x l) (= (A2 x) (A1 x)))))\n\n;; A3 = A0[k <- y]\n(assert (= (A3 k) y))\n(assert (forall ((x Int)) (or (= x k) (= (A3 x) (A0 x)))))\n\n;; A4 = A3[l <- z] = A0[k <- y][l <- z] \n(assert (= (A3 l) z))\n(assert (forall ((x Int)) (or (= x l) (= (A4 x) (A3 x)))))\n\n(assert (and (< w x) (< x y) (< y z)))\n(assert (and (< 0 k) (< k l) (< l n)))\n(assert (> (- l k) 1))\n\n;; A2 is sorted in the interval [0,n-1]\n(assert (forall ((i Int) (j Int))\n (=> (and (<= 0 i) (<= i j) (<= j (- n 1)))\n (<= (A2 i) (A2 j)))))\n\n(check-sat)\n(get-model)\n\n;; A4 is sorted in the interval [0,n-1]\n(assert (forall ((i Int) (j Int))\n (=> (and (<= 0 i) (<= i j) (<= j (- n 1)))\n (<= (A4 i) (A4 j)))))\n\n(check-sat)',result:{output:"sat\n(\n (define-fun k () Int\n 1)\n (define-fun l () Int\n 3)\n (define-fun n () Int\n 4)\n (define-fun y () Int\n 0)\n (define-fun z () Int\n 1)\n (define-fun w () Int\n (- 2))\n (define-fun x () Int\n (- 1))\n (define-fun A2 ((x!0 Int)) Int\n (let ((a!1 (ite (and (<= 1 x!0) (not (<= 3 x!0)))\n (- 2)\n (ite (and (<= 1 x!0) (<= 3 x!0)) (- 1) 11))))\n (ite (<= 1 x!0) a!1 (- 2))))\n (define-fun A1 ((x!0 Int)) Int\n (ite (= x!0 1) (- 2)\n (ite (= x!0 3) 1\n (ite (= x!0 0) (- 2)\n (A2 x!0)))))\n (define-fun A0 ((x!0 Int)) Int\n (ite (= x!0 3) 1\n (ite (= x!0 0) (- 2)\n (A1 x!0))))\n (define-fun A3 ((x!0 Int)) Int\n (ite (= x!0 1) 0\n (ite (= x!0 3) 1\n (ite (= x!0 0) (- 2)\n (A0 x!0)))))\n (define-fun A4 ((x!0 Int)) Int\n (ite (= x!0 1) 0\n (ite (= x!0 0) (- 2)\n (A3 x!0))))\n)\nunsat\n",error:"",status:"z3-ran",hash:"768568e738d0fc8f00dd1f561fc18e59d76f035a"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"list-fragment"},"List Fragment"),(0,i.kt)("p",null,"The list fragment can encode properties about data-structures such as lists. For each quantified axiom q in this fragment, there is an easy way to satisfy q. More information about this fragment can be found in the paper ",(0,i.kt)("a",{parentName:"p",href:"https://people.eecs.berkeley.edu/~necula/Papers/verifier-cav05.pdf"},"Data Structure Specifications via Local Equality Axioms"),"."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n;; Ptr is the pointer sort.\n(declare-sort Ptr)\n;; (next p) represents p.next\n;; The pointer reached by following the field next of p.\n(declare-fun next (Ptr) Ptr)\n(declare-fun prev (Ptr) Ptr)\n(declare-fun state (Ptr) Int)\n(declare-fun prio (Ptr) Int)\n(declare-const null Ptr)\n(declare-const RUN Int)\n(declare-const SLP Int)\n(assert (distinct RUN SLP))\n\n;; Asserting data-structure invariants in the current state.\n\n;; p != null && p.next != null = p.next.prev = p\n(assert (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (next p) null)))\n (= (prev (next p)) p))))\n\n;; p != null && p.prev != null = p.prev.next = p\n(assert (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (prev p) null)))\n (= (next (prev p)) p))))\n\n;; p != null && p.prev != null = p.state = p.next.state\n(assert (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (next p) null)))\n (= (state p) (state (next p))))))\n\n;; p != null && p.prev != null && p.state = RUN = p.prio = p.next.prio\n(assert (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (next p) null))\n (= (state p) RUN))\n (= (prio p) (prio (next p))))))\n\n;; Verifying Verification Conditions (VCs) for remove procedure\n(declare-const x Ptr)\n;; new-state, new-next, new-prev and new-prio represent the state \n;; of the system after executing the remove procedure.\n(declare-fun new-state (Ptr) Int)\n(declare-fun new-next (Ptr) Ptr)\n(declare-fun new-prev (Ptr) Ptr)\n(declare-fun new-prio (Ptr) Int)\n;; pre-conditions\n(assert (not (= x null)))\n(assert (not (= (prev x) null)))\n(assert (= (state x) RUN))\n;; updates\n;; --- new-prev = prev\n(assert (forall ((p Ptr)) (= (new-prev p) (prev p))))\n;; --- new-prio = prio\n(assert (forall ((p Ptr)) (= (new-prio p) (prio p))))\n;; --- new-state = state[x - SLP]\n(assert (= (new-state x) SLP))\n(assert (forall ((p Ptr)) (or (= p x) (= (new-state p) (state p)))))\n;; ----\n;; --- new-next = next[(prev x) - (next x); x - null]\n(assert (= (new-next x) null))\n(assert (= (new-next (prev x)) (next x)))\n(assert (forall ((p Ptr)) (or (= p x) (= p (prev x)) (= (new-next p) (next p)))))\n;; ---\n\n;; Proving the data-structure invariants in the new state.\n\n(push)\n(assert (not (forall ((p Ptr))\n (= (and (not (= p null))\n (not (= (new-next p) null)))\n (= (new-prev (new-next p)) p)))))\n(check-sat)\n(get-model)\n(pop)\n(echo "Why it is not valid")\n(echo "Trying again using a fresh constant bad-ptr as an witness for the failure...")\n(push)\n(declare-const bad-ptr Ptr)\n(assert (not (= (and (not (= bad-ptr null))\n (not (= (new-next bad-ptr) null)))\n (= (new-prev (new-next bad-ptr)) bad-ptr))))\n(check-sat)\n(get-model)\n(echo "null is")\n(eval null)\n(echo "bad-ptr is")\n(eval bad-ptr)\n(echo "In the new state, bad-ptr.next is")\n(eval (new-next bad-ptr))\n(echo "In the new state, bad-ptr.next.prev is")\n(eval (new-prev (new-next bad-ptr)))\n(pop)',result:{output:"sat\n(\n ;; universe for Ptr:\n ;; Ptr!val!3 Ptr!val!6 Ptr!val!2 Ptr!val!0 Ptr!val!8 Ptr!val!9 Ptr!val!10 Ptr!val!11 Ptr!val!12 Ptr!val!7 Ptr!val!5 Ptr!val!1 Ptr!val!4 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Ptr!val!3 () Ptr)\n (declare-fun Ptr!val!6 () Ptr)\n (declare-fun Ptr!val!2 () Ptr)\n (declare-fun Ptr!val!0 () Ptr)\n (declare-fun Ptr!val!8 () Ptr)\n (declare-fun Ptr!val!9 () Ptr)\n (declare-fun Ptr!val!10 () Ptr)\n (declare-fun Ptr!val!11 () Ptr)\n (declare-fun Ptr!val!12 () Ptr)\n (declare-fun Ptr!val!7 () Ptr)\n (declare-fun Ptr!val!5 () Ptr)\n (declare-fun Ptr!val!1 () Ptr)\n (declare-fun Ptr!val!4 () Ptr)\n ;; cardinality constraint:\n (forall ((x Ptr))\n (or (= x Ptr!val!3)\n (= x Ptr!val!6)\n (= x Ptr!val!2)\n (= x Ptr!val!0)\n (= x Ptr!val!8)\n (= x Ptr!val!9)\n (= x Ptr!val!10)\n (= x Ptr!val!11)\n (= x Ptr!val!12)\n (= x Ptr!val!7)\n (= x Ptr!val!5)\n (= x Ptr!val!1)\n (= x Ptr!val!4)))\n ;; -----------\n (define-fun SLP () Int\n 3)\n (define-fun null () Ptr\n Ptr!val!1)\n (define-fun x () Ptr\n Ptr!val!0)\n (define-fun RUN () Int\n 2)\n (define-fun prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!8) Ptr!val!7\n (let ((a!1 (or (= x!0 Ptr!val!11)\n (and (= x!0 Ptr!val!12)\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11)))))\n (a!2 (ite (and (= x!0 Ptr!val!0)\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!1))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!2\n Ptr!val!6)))\n (let ((a!3 (ite (and (not (= x!0 Ptr!val!4))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!1))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!0\n a!2)))\n (let ((a!4 (ite (and (= x!0 Ptr!val!4)\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!1))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!3\n a!3)))\n (let ((a!5 (ite (and (= x!0 Ptr!val!5)\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!4\n a!4)))\n (let ((a!6 (ite (and (= x!0 Ptr!val!6)\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!9\n a!5)))\n (let ((a!7 (ite (and (= x!0 Ptr!val!2)\n (not (= x!0 Ptr!val!1))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!10\n a!6)))\n (let ((a!8 (ite (and (= x!0 Ptr!val!9)\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!11\n a!7)))\n (let ((a!9 (ite (and (= x!0 Ptr!val!10)\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!8)))\n Ptr!val!12\n a!8)))\n (ite (and a!1 (not (= x!0 Ptr!val!8))) Ptr!val!1 a!9)))))))))))\n (define-fun k!57 ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!4) Ptr!val!4\n (ite (= x!0 Ptr!val!0) Ptr!val!0\n (ite (= x!0 Ptr!val!2) Ptr!val!2\n (ite (= x!0 Ptr!val!1) Ptr!val!1\n (ite (= x!0 Ptr!val!5) Ptr!val!5\n (ite (= x!0 Ptr!val!12) Ptr!val!12\n (ite (= x!0 Ptr!val!6) Ptr!val!6\n (ite (= x!0 Ptr!val!7) Ptr!val!7\n (ite (= x!0 Ptr!val!10) Ptr!val!10\n (ite (= x!0 Ptr!val!9) Ptr!val!9\n (ite (= x!0 Ptr!val!11) Ptr!val!11\n (ite (= x!0 Ptr!val!8) Ptr!val!8\n Ptr!val!3)))))))))))))\n (define-fun next ((x!0 Ptr)) Ptr\n (let ((a!1 (ite (= (k!57 x!0) Ptr!val!3)\n Ptr!val!4\n (ite (= (k!57 x!0) Ptr!val!2) Ptr!val!0 Ptr!val!3))))\n (let ((a!2 (ite (= (k!57 x!0) Ptr!val!5)\n Ptr!val!1\n (ite (= (k!57 x!0) Ptr!val!4) Ptr!val!5 a!1))))\n (let ((a!3 (ite (= (k!57 x!0) Ptr!val!1)\n Ptr!val!0\n (ite (= (k!57 x!0) Ptr!val!6) Ptr!val!7 a!2))))\n (let ((a!4 (ite (= (k!57 x!0) Ptr!val!8)\n Ptr!val!1\n (ite (= (k!57 x!0) Ptr!val!7) Ptr!val!8 a!3))))\n (let ((a!5 (ite (= (k!57 x!0) Ptr!val!10)\n Ptr!val!2\n (ite (= (k!57 x!0) Ptr!val!9) Ptr!val!6 a!4))))\n (ite (= (k!57 x!0) Ptr!val!12)\n Ptr!val!10\n (ite (= (k!57 x!0) Ptr!val!11) Ptr!val!9 a!5))))))))\n (define-fun new-prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!3) Ptr!val!0\n (ite (= x!0 Ptr!val!4) Ptr!val!3\n (ite (= x!0 Ptr!val!5) Ptr!val!4\n (ite (= x!0 Ptr!val!1) Ptr!val!6\n (ite (= x!0 Ptr!val!7) Ptr!val!6\n (ite (= x!0 Ptr!val!6) Ptr!val!9\n (ite (= x!0 Ptr!val!2) Ptr!val!10\n (ite (= x!0 Ptr!val!9) Ptr!val!11\n (ite (= x!0 Ptr!val!10) Ptr!val!12\n (ite (= x!0 Ptr!val!12) Ptr!val!1\n (ite (= x!0 Ptr!val!11) Ptr!val!1\n (ite (= x!0 Ptr!val!8) Ptr!val!7\n (prev x!0)))))))))))))))\n (define-fun prio ((x!0 Ptr)) Int\n (let ((a!1 (ite (or (= (k!57 x!0) Ptr!val!3)\n (= (k!57 x!0) Ptr!val!2)\n (= (k!57 x!0) Ptr!val!4)\n (= (k!57 x!0) Ptr!val!0)\n (= (k!57 x!0) Ptr!val!5))\n 4\n 13)))\n (let ((a!2 (ite (= (k!57 x!0) Ptr!val!6)\n 7\n (ite (= (k!57 x!0) Ptr!val!1) 5 a!1))))\n (let ((a!3 (ite (= (k!57 x!0) Ptr!val!8)\n 9\n (ite (= (k!57 x!0) Ptr!val!7) 8 a!2))))\n (let ((a!4 (ite (= (k!57 x!0) Ptr!val!10)\n 4\n (ite (= (k!57 x!0) Ptr!val!9) 10 a!3))))\n (ite (= (k!57 x!0) Ptr!val!12) 4 (ite (= (k!57 x!0) Ptr!val!11) 12 a!4)))))))\n (define-fun state ((x!0 Ptr)) Int\n (let ((a!1 (ite (or (= (k!57 x!0) Ptr!val!3)\n (= (k!57 x!0) Ptr!val!2)\n (= (k!57 x!0) Ptr!val!4)\n (= (k!57 x!0) Ptr!val!0)\n (= (k!57 x!0) Ptr!val!5))\n 2\n 14)))\n (let ((a!2 (ite (or (= (k!57 x!0) Ptr!val!8)\n (= (k!57 x!0) Ptr!val!6)\n (= (k!57 x!0) Ptr!val!9)\n (= (k!57 x!0) Ptr!val!7))\n 11\n (ite (= (k!57 x!0) Ptr!val!1) 6 a!1))))\n (let ((a!3 (ite (= (k!57 x!0) Ptr!val!11)\n 11\n (ite (= (k!57 x!0) Ptr!val!10) 2 a!2))))\n (ite (= (k!57 x!0) Ptr!val!12) 2 a!3)))))\n (define-fun new-next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!1\n (ite (= x!0 Ptr!val!2) Ptr!val!3\n (ite (= x!0 Ptr!val!3) Ptr!val!4\n (ite (= x!0 Ptr!val!4) Ptr!val!5\n (ite (= x!0 Ptr!val!5) Ptr!val!1\n (ite (= x!0 Ptr!val!6) Ptr!val!7\n (ite (= x!0 Ptr!val!1) Ptr!val!0\n (ite (= x!0 Ptr!val!9) Ptr!val!6\n (ite (= x!0 Ptr!val!10) Ptr!val!2\n (ite (= x!0 Ptr!val!11) Ptr!val!9\n (ite (= x!0 Ptr!val!12) Ptr!val!10\n (ite (= x!0 Ptr!val!7) Ptr!val!8\n (ite (= x!0 Ptr!val!8) Ptr!val!1\n (next x!0)))))))))))))))\n (define-fun new-prio ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!3) 4\n (ite (= x!0 Ptr!val!0) 4\n (ite (= x!0 Ptr!val!4) 4\n (ite (= x!0 Ptr!val!2) 4\n (ite (= x!0 Ptr!val!5) 4\n (ite (= x!0 Ptr!val!1) 5\n (ite (= x!0 Ptr!val!7) 8\n (ite (= x!0 Ptr!val!6) 7\n (ite (= x!0 Ptr!val!9) 10\n (ite (= x!0 Ptr!val!10) 4\n (ite (= x!0 Ptr!val!12) 4\n (ite (= x!0 Ptr!val!8) 9\n (ite (= x!0 Ptr!val!11) 12\n (prio x!0)))))))))))))))\n (define-fun new-state ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!0) 3\n (ite (= x!0 Ptr!val!3) 2\n (ite (= x!0 Ptr!val!2) 2\n (ite (= x!0 Ptr!val!4) 2\n (ite (= x!0 Ptr!val!5) 2\n (ite (= x!0 Ptr!val!1) 6\n (ite (= x!0 Ptr!val!7) 11\n (ite (= x!0 Ptr!val!6) 11\n (ite (= x!0 Ptr!val!9) 11\n (ite (= x!0 Ptr!val!10) 2\n (ite (= x!0 Ptr!val!12) 2\n (ite (= x!0 Ptr!val!11) 11\n (ite (= x!0 Ptr!val!8) 11\n (state x!0)))))))))))))))\n)\nWhy it is not valid\nTrying again using a fresh constant bad-ptr as an witness for the failure...\nsat\n(\n ;; universe for Ptr:\n ;; Ptr!val!3 Ptr!val!6 Ptr!val!2 Ptr!val!0 Ptr!val!8 Ptr!val!9 Ptr!val!10 Ptr!val!11 Ptr!val!12 Ptr!val!7 Ptr!val!5 Ptr!val!1 Ptr!val!4 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Ptr!val!3 () Ptr)\n (declare-fun Ptr!val!6 () Ptr)\n (declare-fun Ptr!val!2 () Ptr)\n (declare-fun Ptr!val!0 () Ptr)\n (declare-fun Ptr!val!8 () Ptr)\n (declare-fun Ptr!val!9 () Ptr)\n (declare-fun Ptr!val!10 () Ptr)\n (declare-fun Ptr!val!11 () Ptr)\n (declare-fun Ptr!val!12 () Ptr)\n (declare-fun Ptr!val!7 () Ptr)\n (declare-fun Ptr!val!5 () Ptr)\n (declare-fun Ptr!val!1 () Ptr)\n (declare-fun Ptr!val!4 () Ptr)\n ;; cardinality constraint:\n (forall ((x Ptr))\n (or (= x Ptr!val!3)\n (= x Ptr!val!6)\n (= x Ptr!val!2)\n (= x Ptr!val!0)\n (= x Ptr!val!8)\n (= x Ptr!val!9)\n (= x Ptr!val!10)\n (= x Ptr!val!11)\n (= x Ptr!val!12)\n (= x Ptr!val!7)\n (= x Ptr!val!5)\n (= x Ptr!val!1)\n (= x Ptr!val!4)))\n ;; -----------\n (define-fun bad-ptr () Ptr\n Ptr!val!0)\n (define-fun SLP () Int\n 4)\n (define-fun x () Ptr\n Ptr!val!2)\n (define-fun RUN () Int\n 3)\n (define-fun null () Ptr\n Ptr!val!3)\n (define-fun prev ((x!0 Ptr)) Ptr\n (let ((a!1 (or (= x!0 Ptr!val!7)\n (and (= x!0 Ptr!val!3)\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7)))))\n (a!2 (ite (and (= x!0 Ptr!val!2)\n (not (= x!0 Ptr!val!3))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!0\n Ptr!val!9)))\n (let ((a!3 (ite (and (not (= x!0 Ptr!val!4))\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!3))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!2\n a!2)))\n (let ((a!4 (ite (and (= x!0 Ptr!val!4)\n (not (= x!0 Ptr!val!2))\n (not (= x!0 Ptr!val!3))\n (not (= x!0 Ptr!val!5))\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!1\n a!3)))\n (let ((a!5 (ite (and (= x!0 Ptr!val!5)\n (not (= x!0 Ptr!val!6))\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!4\n a!4)))\n (let ((a!6 (ite (and a!1\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!9))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0)))\n Ptr!val!6\n a!5)))\n (let ((a!7 (ite (and (= x!0 Ptr!val!8)\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!7\n a!6)))\n (let ((a!8 (ite (and (= x!0 Ptr!val!6)\n (not (= x!0 Ptr!val!7))\n (not (= x!0 Ptr!val!8))\n (not (= x!0 Ptr!val!0))\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!10\n (ite (= x!0 Ptr!val!9) Ptr!val!8 a!7))))\n (let ((a!9 (ite (and (= x!0 Ptr!val!0)\n (not (= x!0 Ptr!val!10))\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!3\n a!8)))\n (let ((a!10 (ite (and (= x!0 Ptr!val!10)\n (not (= x!0 Ptr!val!11))\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!11\n a!9)))\n (let ((a!11 (ite (and (= x!0 Ptr!val!11)\n (not (= x!0 Ptr!val!12))\n (not (= x!0 Ptr!val!9)))\n Ptr!val!12\n a!10)))\n (ite (and (= x!0 Ptr!val!12) (not (= x!0 Ptr!val!9))) Ptr!val!3 a!11))))))))))))\n (define-fun k!141 ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!4) Ptr!val!4\n (ite (= x!0 Ptr!val!2) Ptr!val!2\n (ite (= x!0 Ptr!val!3) Ptr!val!3\n (ite (= x!0 Ptr!val!5) Ptr!val!5\n (ite (= x!0 Ptr!val!6) Ptr!val!6\n (ite (= x!0 Ptr!val!7) Ptr!val!7\n (ite (= x!0 Ptr!val!8) Ptr!val!8\n (ite (= x!0 Ptr!val!0) Ptr!val!0\n (ite (= x!0 Ptr!val!10) Ptr!val!10\n (ite (= x!0 Ptr!val!11) Ptr!val!11\n (ite (= x!0 Ptr!val!12) Ptr!val!12\n (ite (= x!0 Ptr!val!9) Ptr!val!9\n Ptr!val!1)))))))))))))\n (define-fun next ((x!0 Ptr)) Ptr\n (let ((a!1 (ite (= (k!141 x!0) Ptr!val!2)\n Ptr!val!1\n (ite (= (k!141 x!0) Ptr!val!0) Ptr!val!2 Ptr!val!11))))\n (let ((a!2 (ite (= (k!141 x!0) Ptr!val!4)\n Ptr!val!5\n (ite (= (k!141 x!0) Ptr!val!1) Ptr!val!4 a!1))))\n (let ((a!3 (ite (= (k!141 x!0) Ptr!val!3)\n Ptr!val!2\n (ite (= (k!141 x!0) Ptr!val!5) Ptr!val!3 a!2))))\n (let ((a!4 (ite (= (k!141 x!0) Ptr!val!7)\n Ptr!val!8\n (ite (= (k!141 x!0) Ptr!val!6) Ptr!val!7 a!3))))\n (let ((a!5 (ite (= (k!141 x!0) Ptr!val!9)\n Ptr!val!3\n (ite (= (k!141 x!0) Ptr!val!8) Ptr!val!9 a!4))))\n (ite (= (k!141 x!0) Ptr!val!11)\n Ptr!val!10\n (ite (= (k!141 x!0) Ptr!val!10) Ptr!val!6 a!5))))))))\n (define-fun new-prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n (ite (= x!0 Ptr!val!1) Ptr!val!2\n (ite (= x!0 Ptr!val!4) Ptr!val!1\n (ite (= x!0 Ptr!val!5) Ptr!val!4\n (ite (= x!0 Ptr!val!3) Ptr!val!6\n (ite (= x!0 Ptr!val!7) Ptr!val!6\n (ite (= x!0 Ptr!val!6) Ptr!val!10\n (ite (= x!0 Ptr!val!0) Ptr!val!3\n (ite (= x!0 Ptr!val!10) Ptr!val!11\n (ite (= x!0 Ptr!val!11) Ptr!val!12\n (ite (= x!0 Ptr!val!8) Ptr!val!7\n (ite (= x!0 Ptr!val!12) Ptr!val!3\n (ite (= x!0 Ptr!val!9) Ptr!val!8\n (prev x!0)))))))))))))))\n (define-fun prio ((x!0 Ptr)) Int\n (let ((a!1 (ite (or (= (k!141 x!0) Ptr!val!4)\n (= (k!141 x!0) Ptr!val!0)\n (= (k!141 x!0) Ptr!val!2)\n (= (k!141 x!0) Ptr!val!5)\n (= (k!141 x!0) Ptr!val!1))\n 2\n 15)))\n (let ((a!2 (ite (= (k!141 x!0) Ptr!val!6)\n 7\n (ite (= (k!141 x!0) Ptr!val!3) 6 a!1))))\n (let ((a!3 (ite (= (k!141 x!0) Ptr!val!8)\n 9\n (ite (= (k!141 x!0) Ptr!val!7) 8 a!2))))\n (let ((a!4 (ite (= (k!141 x!0) Ptr!val!11)\n 12\n (ite (= (k!141 x!0) Ptr!val!10) 11 a!3))))\n (ite (= (k!141 x!0) Ptr!val!9) 14 (ite (= (k!141 x!0) Ptr!val!12) 13 a!4)))))))\n (define-fun new-next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!1\n (ite (= x!0 Ptr!val!2) Ptr!val!3\n (ite (= x!0 Ptr!val!1) Ptr!val!4\n (ite (= x!0 Ptr!val!4) Ptr!val!5\n (ite (= x!0 Ptr!val!6) Ptr!val!7\n (ite (= x!0 Ptr!val!5) Ptr!val!3\n (ite (= x!0 Ptr!val!3) Ptr!val!2\n (ite (= x!0 Ptr!val!10) Ptr!val!6\n (ite (= x!0 Ptr!val!11) Ptr!val!10\n (ite (= x!0 Ptr!val!7) Ptr!val!8\n (ite (= x!0 Ptr!val!12) Ptr!val!11\n (ite (= x!0 Ptr!val!9) Ptr!val!3\n (ite (= x!0 Ptr!val!8) Ptr!val!9\n (next x!0)))))))))))))))\n (define-fun state ((x!0 Ptr)) Int\n (let ((a!1 (ite (or (= (k!141 x!0) Ptr!val!4)\n (= (k!141 x!0) Ptr!val!0)\n (= (k!141 x!0) Ptr!val!2)\n (= (k!141 x!0) Ptr!val!5)\n (= (k!141 x!0) Ptr!val!1))\n 3\n 16)))\n (ite (or (= (k!141 x!0) Ptr!val!11)\n (= (k!141 x!0) Ptr!val!10)\n (= (k!141 x!0) Ptr!val!12)\n (= (k!141 x!0) Ptr!val!8)\n (= (k!141 x!0) Ptr!val!7)\n (= (k!141 x!0) Ptr!val!9)\n (= (k!141 x!0) Ptr!val!6))\n 10\n (ite (= (k!141 x!0) Ptr!val!3) 5 a!1))))\n (define-fun new-prio ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!1) 2\n (ite (= x!0 Ptr!val!0) 2\n (ite (= x!0 Ptr!val!2) 2\n (ite (= x!0 Ptr!val!4) 2\n (ite (= x!0 Ptr!val!5) 2\n (ite (= x!0 Ptr!val!3) 6\n (ite (= x!0 Ptr!val!7) 8\n (ite (= x!0 Ptr!val!6) 7\n (ite (= x!0 Ptr!val!10) 11\n (ite (= x!0 Ptr!val!8) 9\n (ite (= x!0 Ptr!val!11) 12\n (ite (= x!0 Ptr!val!12) 13\n (ite (= x!0 Ptr!val!9) 14\n (prio x!0)))))))))))))))\n (define-fun new-state ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!1) 3\n (ite (= x!0 Ptr!val!0) 3\n (ite (= x!0 Ptr!val!2) 4\n (ite (= x!0 Ptr!val!4) 3\n (ite (= x!0 Ptr!val!5) 3\n (ite (= x!0 Ptr!val!3) 5\n (ite (= x!0 Ptr!val!7) 10\n (ite (= x!0 Ptr!val!6) 10\n (ite (= x!0 Ptr!val!10) 10\n (ite (= x!0 Ptr!val!11) 10\n (ite (= x!0 Ptr!val!8) 10\n (ite (= x!0 Ptr!val!12) 10\n (ite (= x!0 Ptr!val!9) 10\n (state x!0)))))))))))))))\n)\nnull is\nPtr!val!3\nbad-ptr is\nPtr!val!0\nIn the new state, bad-ptr.next is\nPtr!val!1\nIn the new state, bad-ptr.next.prev is\nPtr!val!2\n",error:"",status:"z3-ran",hash:"b2dc310f04df5a47f444627f2ab511707c5f38cc"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"essentially-almost-uninterpreted-fragment"},"Essentially (Almost) Uninterpreted Fragment"),(0,i.kt)("p",null,"The essentially almost uninterpreted fragment subsumes the previous fragments, and uses a more relaxed notion of stratification. More information about this fragment can be found in the paper ",(0,i.kt)("a",{parentName:"p",href:"https://leodemoura.github.io/files/ci.pdf"},"Complete instantiation for quantified formulas in Satisfiability Modulo Theories.")," The model based quantifier instantiation approach used in Z3 is also described in this paper. Stratified data-structures (such as arrays of pointers) can be encoded in this fragment."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n;; Ptr is the pointer sort.\n(declare-sort Ptr)\n;; (next p) represents p.next\n;; The pointer reached by following the field "next" of p.\n(declare-fun next (Ptr) Ptr)\n(declare-fun prev (Ptr) Ptr)\n(declare-fun state (Ptr) Int)\n(declare-fun prio (Ptr) Int)\n(declare-const null Ptr)\n(declare-const RUN Int)\n(declare-const SLP Int)\n(assert (distinct RUN SLP))\n\n;; Asserting data-structure invariants in the current state.\n\n;; p != null && p.next != null => p.next.prev = p\n(assert (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (next p) null)))\n (= (prev (next p)) p))))\n\n;; p != null && p.prev != null => p.prev.next = p\n(assert (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (prev p) null)))\n (= (next (prev p)) p))))\n\n;; p != null && p.prev != null => p.state = p.next.state\n(assert (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (next p) null)))\n (= (state p) (state (next p))))))\n\n;; p != null && p.prev != null && p.state = RUN => p.prio >= p.next.prio\n(assert (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (next p) null))\n (= (state p) RUN))\n (>= (prio p) (prio (next p))))))\n\n;; Verifying Verification Conditions (VCs) for remove procedure\n(declare-const x Ptr)\n;; new-state, new-next, new-prev and new-prio represent the state \n;; of the system after executing the remove procedure.\n(declare-fun new-state (Ptr) Int)\n(declare-fun new-next (Ptr) Ptr)\n(declare-fun new-prev (Ptr) Ptr)\n(declare-fun new-prio (Ptr) Int)\n;; pre-conditions\n(assert (not (= x null)))\n(assert (not (= (prev x) null)))\n(assert (= (state x) RUN))\n;; updates\n;; --- new-prev = prev\n(assert (forall ((p Ptr)) (= (new-prev p) (prev p))))\n;; --- new-prio = prio\n(assert (forall ((p Ptr)) (= (new-prio p) (prio p))))\n;; --- new-state = state[x -> SLP]\n(assert (= (new-state x) SLP))\n(assert (forall ((p Ptr)) (or (= p x) (= (new-state p) (state p)))))\n;; ----\n;; --- new-next = next[(prev x) -> (next x); x -> null]\n(assert (= (new-next x) null))\n(assert (= (new-next (prev x)) (next x)))\n(assert (forall ((p Ptr)) (or (= p x) (= p (prev x)) (= (new-next p) (next p)))))\n;; ---\n\n;; Proving the data-structure invariants in the new state.\n\n(push)\n(assert (not (forall ((p Ptr))\n (=> (and (not (= p null))\n (not (= (new-next p) null)))\n (= (new-prev (new-next p)) p)))))\n(check-sat)\n(get-model)\n(pop)\n(echo "Why it is not valid?")\n(echo "Trying again using a fresh constant bad-ptr as an witness for the failure...")\n(push)\n(declare-const bad-ptr Ptr)\n(assert (not (=> (and (not (= bad-ptr null))\n (not (= (new-next bad-ptr) null)))\n (= (new-prev (new-next bad-ptr)) bad-ptr))))\n(check-sat)\n(get-model)\n(echo "null is")\n(eval null)\n(echo "bad-ptr is")\n(eval bad-ptr)\n(echo "In the new state, bad-ptr.next is")\n(eval (new-next bad-ptr))\n(echo "In the new state, bad-ptr.next.prev is")\n(eval (new-prev (new-next bad-ptr)))\n(pop)\n',result:{output:"sat\n(\n ;; universe for Ptr:\n ;; Ptr!val!2 Ptr!val!1 Ptr!val!0 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Ptr!val!2 () Ptr)\n (declare-fun Ptr!val!1 () Ptr)\n (declare-fun Ptr!val!0 () Ptr)\n ;; cardinality constraint:\n (forall ((x Ptr)) (or (= x Ptr!val!2) (= x Ptr!val!1) (= x Ptr!val!0)))\n ;; -----------\n (define-fun SLP () Int\n 3)\n (define-fun null () Ptr\n Ptr!val!1)\n (define-fun x () Ptr\n Ptr!val!0)\n (define-fun RUN () Int\n 2)\n (define-fun prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n Ptr!val!1)))\n (define-fun next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n Ptr!val!1)))\n (define-fun prio ((x!0 Ptr)) Int\n 0)\n (define-fun new-prio ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!0) 0\n (ite (= x!0 Ptr!val!2) 0\n (prio x!0))))\n (define-fun new-prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n (prev x!0))))\n (define-fun state ((x!0 Ptr)) Int\n 2)\n (define-fun new-state ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!0) 3\n (ite (= x!0 Ptr!val!2) 2\n (state x!0))))\n (define-fun new-next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!1\n (ite (= x!0 Ptr!val!2) Ptr!val!2\n (next x!0))))\n)\nWhy it is not valid?\nTrying again using a fresh constant bad-ptr as an witness for the failure...\nsat\n(\n ;; universe for Ptr:\n ;; Ptr!val!3 Ptr!val!5 Ptr!val!2 Ptr!val!1 Ptr!val!4 Ptr!val!0 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Ptr!val!3 () Ptr)\n (declare-fun Ptr!val!5 () Ptr)\n (declare-fun Ptr!val!2 () Ptr)\n (declare-fun Ptr!val!1 () Ptr)\n (declare-fun Ptr!val!4 () Ptr)\n (declare-fun Ptr!val!0 () Ptr)\n ;; cardinality constraint:\n (forall ((x Ptr))\n (or (= x Ptr!val!3)\n (= x Ptr!val!5)\n (= x Ptr!val!2)\n (= x Ptr!val!1)\n (= x Ptr!val!4)\n (= x Ptr!val!0)))\n ;; -----------\n (define-fun bad-ptr () Ptr\n Ptr!val!2)\n (define-fun SLP () Int\n 3)\n (define-fun x () Ptr\n Ptr!val!0)\n (define-fun RUN () Int\n 2)\n (define-fun null () Ptr\n Ptr!val!1)\n (define-fun prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!3) Ptr!val!0\n (ite (= x!0 Ptr!val!4) Ptr!val!3\n (ite (= x!0 Ptr!val!5) Ptr!val!4\n Ptr!val!1)))))\n (define-fun next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!3\n (ite (= x!0 Ptr!val!2) Ptr!val!0\n (ite (= x!0 Ptr!val!3) Ptr!val!4\n (ite (= x!0 Ptr!val!4) Ptr!val!5\n Ptr!val!1)))))\n (define-fun prio ((x!0 Ptr)) Int\n 0)\n (define-fun new-prio ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!2) 0\n (ite (= x!0 Ptr!val!0) 0\n (ite (= x!0 Ptr!val!3) 0\n (ite (= x!0 Ptr!val!4) 0\n (ite (= x!0 Ptr!val!5) 0\n (prio x!0)))))))\n (define-fun new-prev ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!2\n (ite (= x!0 Ptr!val!3) Ptr!val!0\n (ite (= x!0 Ptr!val!4) Ptr!val!3\n (ite (= x!0 Ptr!val!5) Ptr!val!4\n (prev x!0))))))\n (define-fun state ((x!0 Ptr)) Int\n 2)\n (define-fun new-state ((x!0 Ptr)) Int\n (ite (= x!0 Ptr!val!0) 3\n (ite (= x!0 Ptr!val!2) 2\n (ite (= x!0 Ptr!val!3) 2\n (ite (= x!0 Ptr!val!4) 2\n (ite (= x!0 Ptr!val!5) 2\n (state x!0)))))))\n (define-fun new-next ((x!0 Ptr)) Ptr\n (ite (= x!0 Ptr!val!0) Ptr!val!1\n (ite (= x!0 Ptr!val!2) Ptr!val!3\n (ite (= x!0 Ptr!val!3) Ptr!val!4\n (ite (= x!0 Ptr!val!4) Ptr!val!5\n (ite (= x!0 Ptr!val!5) Ptr!val!1\n (next x!0)))))))\n)\nnull is\nPtr!val!1\nbad-ptr is\nPtr!val!2\nIn the new state, bad-ptr.next is\nPtr!val!3\nIn the new state, bad-ptr.next.prev is\nPtr!val!0\n",error:"",status:"z3-ran",hash:"5ea77d15848b1b165e779fe38e9cfe11c01043e5"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Shifts on streams (or arrays) can also be encoded."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n;; f an g are "streams"\n(declare-fun f (Int) Int)\n(declare-fun g (Int) Int)\n\n;; the segment [a, n + a] of stream f is equal to the segment [0, n] of stream g.\n(declare-const n Int)\n(declare-const a Int)\n(assert (forall ((x Int)) (=> (and (<= 0 x) (<= x n))\n (= (f (+ x a)) (g x)))))\n\n;; adding some constraints to a\n(assert (> a 10))\n(assert (>= (f a) 2))\n(assert (<= (g 3) (- 10)))\n\n(check-sat)\n(get-model)',result:{output:"sat\n(\n (define-fun n () Int\n 0)\n (define-fun a () Int\n 11)\n (define-fun f ((x!0 Int)) Int\n 2)\n (define-fun g ((x!0 Int)) Int\n (ite (= x!0 3) (- 10)\n (f (+ 11 x!0))))\n)\n",error:"",status:"z3-ran",hash:"dd3a84a4109ed5c1a4feff9b4ef79de54459ab15"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"quantified-bit-vector-formulas"},"Quantified Bit-Vector Formulas"),(0,i.kt)("p",null,"A quantified bit-Vector formula (QBVF) is a many sorted first-order logic formula where the sort of every variable is a bit-vector sort. The QBVF satisfiability problem, is the problem of deciding whether a QBVF is satisfiable modulo the theory of bit-vectors. This problem is decidable because every universal (existential) quantifier can be expanded into a conjunction (disjunction) of potentially exponential, but finite size. A distinguishing feature in QBVF is the support for uninterpreted function and predicate symbols. More information about this fragment can be found in the paper ",(0,i.kt)("a",{parentName:"p",href:"https://www.winterstiger.at/christoph/papers/whd10.pdf"},"Efficiently Solving Quantified Bit-Vector Formulas"),"."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(define-sort AsciiChar () (_ BitVec 8))\n\n(declare-fun f (AsciiChar) AsciiChar)\n(declare-fun f1 (AsciiChar) AsciiChar)\n(declare-const a AsciiChar)\n\n(assert (bvugt a #x00))\n(assert (= (f1 (bvadd a #x01)) #x00))\n(assert (forall ((x AsciiChar)) (or (= x (bvadd a #x01)) (= (f1 x) (f x)))))\n\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun a () (_ BitVec 8)\n #xfd)\n (define-fun f ((x!0 (_ BitVec 8))) (_ BitVec 8)\n #xfd)\n (define-fun f1 ((x!0 (_ BitVec 8))) (_ BitVec 8)\n (ite (= x!0 #xfe) #x00\n (f x!0)))\n)\n",error:"",status:"z3-ran",hash:"c264234a691ddac70df56548ce77462ede0f8e80"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"conditional-and-pseudo-macros"},"Conditional (and Pseudo) Macros"),(0,i.kt)("p",null,"Quantifiers defining macros are also automatically detected by the Model Finder. In the following example, the first three quantifiers are defining f by cases."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(declare-fun f (Int) Int)\n(declare-fun p (Int) Bool)\n(declare-fun p2 (Int) Bool)\n(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(assert (forall ((x Int)) \n (=> (not (p x)) (= (f x) (+ x 1)))))\n(assert (forall ((x Int)) \n (=> (and (p x) (not (p2 x))) (= (f x) x))))\n(assert (forall ((x Int)) \n (=> (p2 x) (= (f x) (- x 1)))))\n(assert (p b))\n(assert (p c))\n(assert (p2 a))\n(assert (> (f a) b))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun c () Int\n 1236)\n (define-fun b () Int\n 0)\n (define-fun a () Int\n 2)\n (define-fun p ((x!0 Int)) Bool\n true)\n (define-fun p2 ((x!0 Int)) Bool\n (ite (= x!0 2) true\n false))\n (define-fun f ((x!0 Int)) Int\n (ite (= x!0 2) 1\n (ite (= x!0 0) 0\n (ite (= x!0 1236) 1236\n (let ((a!1 (ite (and (p x!0) (not (p2 x!0))) x!0 (+ 1 x!0))))\n (ite (p2 x!0) (+ (- 1) x!0) a!1))))))\n)\n",error:"",status:"z3-ran",hash:"93b6b00598ccc4520467c29479ec2546a13771c7"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h4",{id:"my-formula-is-not-in-any-of-the-fragments-above"},"My formula is not in any of the fragments above"),(0,i.kt)("p",null,"Even if your formula is not in any of the fragments above. Z3 may still find a model for it. For example, The following simple example is not in the fragments described above."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :smt.mbqi true)\n(declare-fun n () Int)\n(declare-fun a_1 () Int)\n(declare-fun f (Int) Int)\n(declare-fun g_1 (Int) Int)\n(assert (> n 0))\n(assert (forall ((i Int))\n (=> (and (<= 0 i) (<= i n))\n (and (= (f 0) 0)\n (= (f 2) 2)\n (<= 0 (f i))\n (<= (f i) 2)\n (=> (= (f i) 2) (= i n))\n (=> (= (f i) 0)\n (or (= (f (+ i 1)) 1) (= (f (+ i 1)) 2)))\n (=> (= (f i) 1)\n (or (= (f (+ i 1)) 1) (= (f (+ i 1)) 2)))\n (= (g_1 0) 0)\n (=> (= (f i) 0) (= (g_1 (+ i 1)) 0))\n (=> (= (f i) 1) (= (g_1 (+ i 1)) (+ (g_1 i) 1)))\n (=> (= (f i) 2)\n (= (g_1 (+ i 1)) (g_1 i)))\n (=> (= (f i) 1) (< (g_1 i) a_1))\n (=> (= (f i) 2) \n (and (>= (g_1 i) a_1) (> (g_1 i) 2)))))))\n(check-sat)\n(get-model)\n\n(echo "Property does not hold for n > 1")\n(assert (> n 1))\n(check-sat)',result:{output:"sat\n(\n (define-fun n () Int\n 1)\n (define-fun a_1 () Int\n 1)\n (define-fun k!2 ((x!0 Int)) Int\n (ite (<= 0 x!0) (ite (<= 1 x!0) (ite (<= 2 x!0) 2 1) 0) (- 1)))\n (define-fun g_1 ((x!0 Int)) Int\n (let ((a!1 (ite (= (k!2 x!0) 2) 1 (ite (= (k!2 x!0) 0) 0 8))))\n (ite (= (k!2 x!0) 1) 0 a!1)))\n (define-fun f ((x!0 Int)) Int\n (let ((a!1 (ite (= (k!2 x!0) 2) 2 (ite (= (k!2 x!0) 0) 0 9))))\n (ite (= (k!2 x!0) 1) 1 a!1)))\n)\nProperty does not hold for n > 1\nunsat\n",error:"",status:"z3-ran",hash:"948738e615eacb8daca79f9660b0a9e6ea9b49e1"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The Z3 preprocessor has many options that may improve the performance of the model finder. In the following example, macro-finder will expand quantifiers representing macros at preprocessing time."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(set-option :smt.macro-finder true)\n\n(declare-sort Action)\n(declare-sort Role)\n(declare-sort Permission)\n(declare-sort Id)\n\n(declare-fun Client () Role) \n(declare-fun FinAdmin () Role)\n(declare-fun FinClerk () Role)\n(declare-fun Manager () Role)\n(declare-fun POAdmin () Role)\n(declare-fun POClerk () Role)\n(declare-fun action2int (Action) Int)\n(declare-fun id1 () Id)\n(declare-fun id2 () Id)\n(declare-fun id2int (Id) Int)\n(declare-fun id3 () Id)\n(declare-fun id4 () Id)\n(declare-fun id5 () Id)\n(declare-fun id6 () Id)\n(declare-fun id7 () Id)\n(declare-fun p1 () Permission)\n(declare-fun p2 () Permission)\n(declare-fun p3 () Permission)\n(declare-fun p4 () Permission)\n(declare-fun p5 () Permission)\n(declare-fun p6 () Permission)\n(declare-fun permission2int (Permission) Int)\n(declare-fun role2int (Role) Int)\n(declare-fun role_level (Role) Int)\n(declare-fun t1_receive () Action)\n(declare-fun t2_invoke () Action)\n(declare-fun t3_split () Action)\n(declare-fun t4_join () Action)\n(declare-fun t5_invoke () Action)\n(declare-fun t6_invoke () Action)\n(declare-fun t7_invokeO () Action)\n(declare-fun t8_invokeI () Action)\n(declare-fun t9_invoke () Action)\n(declare-fun in_creator_ctrPay_0 () Int)\n(declare-fun in_creator_ctrPay_1 () Int)\n(declare-fun in_customer_crtPO_0 () Int)\n(declare-fun in_customer_crtPO_1 () Int)\n(declare-fun out_approverPOPayment_apprPay_0 () Int)\n(declare-fun out_approverPOPayment_apprPay_1 () Int)\n(declare-fun out_approverPO_apprPO_0 () Int)\n(declare-fun out_approverPO_apprPO_1 () Int)\n(declare-fun out_creator_ctrPay_0 () Int)\n(declare-fun out_creator_ctrPay_1 () Int)\n(declare-fun out_signerGRN_ctrsignGRN_0 () Int)\n(declare-fun out_signerGRN_ctrsignGRN_1 () Int)\n(declare-fun out_signerGRN_signGRN_0 () Int)\n(declare-fun out_signerGRN_signGRN_1 () Int)\n(declare-fun p10_final_0 () Int)\n(declare-fun p10_final_1 () Int)\n(declare-fun p11_final_0 () Int)\n(declare-fun p11_final_1 () Int)\n(declare-fun p1_final_0 () Int)\n(declare-fun p1_final_1 () Int)\n(declare-fun p2_final_0 () Int)\n(declare-fun p2_final_1 () Int)\n(declare-fun p3_running_0 () Int)\n(declare-fun p3_running_1 () Int)\n(declare-fun p4_final_0 () Int)\n(declare-fun p4_final_1 () Int)\n(declare-fun p5_final_0 () Int)\n(declare-fun p5_final_1 () Int)\n(declare-fun p6_initial_0 () Int)\n(declare-fun p6_initial_1 () Int)\n(declare-fun p7_final_0 () Int)\n(declare-fun p7_final_1 () Int)\n(declare-fun p8_initial_0 () Int)\n(declare-fun p8_initial_1 () Int)\n(declare-fun p9_initial_0 () Int)\n(declare-fun p9_initial_1 () Int)\n\n\n;PREDICATES\n\n(declare-fun has_permission (Id Action) Bool)\n(declare-fun permission (Permission Action) Bool)\n(declare-fun role (Role) Bool)\n(declare-fun role_le (Role Role) Bool)\n(declare-fun role_permission_assign (Role Permission) Bool)\n(declare-fun user (Id) Bool)\n(declare-fun user_role_assign (Id Role) Bool)\n(declare-fun can_exec_0 (Id Action) Bool)\n(declare-fun can_exec_1 (Id Action) Bool)\n(declare-fun executed_0 (Id Action) Bool) \n(declare-fun executed_1 (Id Action) Bool)\n(declare-fun initial_pm_0 () Bool)\n(declare-fun initial_wf_0 () Bool)\n(declare-fun t1_receive_0_1 (Id) Bool)\n(declare-fun t2_invoke_0_1 (Id) Bool)\n(declare-fun t3_split_0_1 (Id) Bool)\n(declare-fun t4_join_0_1 (Id) Bool)\n(declare-fun t5_invoke_0_1 (Id) Bool)\n(declare-fun t6_invoke_0_1 (Id) Bool)\n(declare-fun t7_invokeO_0_1 (Id) Bool)\n(declare-fun t8_invokeI_0_1 (Id) Bool)\n(declare-fun t9_invoke_0_1 (Id) Bool)\n\n(assert\n(forall ((?U Action) (?V Action)) (implies (= (action2int ?U) (action2int ?V)) (= ?U ?V))))\n \n\n;assumption 2\n(assert\n(forall ((?U Action)) (and (<= 1 (action2int ?U)) (<= (action2int ?U) 9))))\n \n\n;assumption 3\n(assert\n(= (action2int t1_receive) 1))\n\n;assumption 4\n(assert\n(= (action2int t2_invoke) 2))\n\n;assumption 5\n(assert\n(= (action2int t3_split) 3))\n\n;assumption 6\n(assert\n(= (action2int t4_join) 4))\n\n;assumption 7\n(assert\n(= (action2int t5_invoke) 5))\n\n;assumption 8\n(assert\n(= (action2int t6_invoke) 6))\n\n;assumption 9\n(assert\n(= (action2int t7_invokeO) 7))\n\n;assumption 10\n(assert\n(= (action2int t8_invokeI) 8))\n\n;assumption 11\n(assert\n(= (action2int t9_invoke) 9))\n\n;assumption 12\n(assert\n(forall ((?U Role) (?V Role)) (implies (= (role2int ?U) (role2int ?V)) (= ?U ?V))))\n \n\n;assumption 13\n(assert\n(forall ((?U Role)) (and (<= 1 (role2int ?U)) (<= (role2int ?U) 6))))\n \n\n;assumption 14\n(assert\n(= (role2int Manager) 1))\n\n;assumption 15\n(assert\n(= (role2int FinAdmin) 2))\n\n;assumption 16\n(assert\n(= (role2int FinClerk) 3))\n\n;assumption 17\n(assert\n(= (role2int POAdmin) 4))\n\n;assumption 18\n(assert\n(= (role2int POClerk) 5))\n\n;assumption 19\n(assert\n(= (role2int Client) 6))\n\n;assumption 20\n(assert\n(forall ((?U Permission) (?V Permission)) (implies (= (permission2int ?U) (permission2int ?V)) (= ?U ?V))))\n \n\n;assumption 21\n(assert\n(forall ((?U Permission)) (and (<= 1 (permission2int ?U)) (<= (permission2int ?U) 6))))\n \n\n;assumption 22\n(assert\n(= (permission2int p1) 1))\n\n;assumption 23\n(assert\n(= (permission2int p2) 2))\n\n;assumption 24\n(assert\n(= (permission2int p3) 3))\n\n;assumption 25\n(assert\n(= (permission2int p4) 4))\n\n;assumption 26\n(assert\n(= (permission2int p5) 5))\n\n;assumption 27\n(assert\n(= (permission2int p6) 6))\n\n;assumption 28\n(assert\n(forall ((?U Permission) (?V Action)) (iff (permission ?U ?V) (or (and (= ?U p1) (= ?V t2_invoke)) (or (and (= ?U p2) (= ?V t5_invoke)) (or (and (= ?U p3) (= ?V t6_invoke)) (or (and (= ?U p4) (or (= ?V t7_invokeO) (= ?V t8_invokeI))) (or (and (= ?U p5) (= ?V t9_invoke)) (and (= ?U p6) (= ?V t1_receive))))))))))\n \n\n;assumption 29\n(assert\n(forall ((?U Id) (?V Role)) (iff (user_role_assign ?U ?V) (or (and (= ?U id7) (= ?V Manager)) (or (and (= ?U id1) (= ?V Manager)) (or (and (= ?U id2) (= ?V FinAdmin)) (or (and (= ?U id3) (= ?V FinClerk)) (or (and (= ?U id4) (= ?V POAdmin)) (or (and (= ?U id5) (= ?V POClerk)) (and (= ?U id6) (= ?V Client)))))))))))\n \n\n;assumption 30\n(assert\n(forall ((?U Role) (?V Permission)) (iff (role_permission_assign ?U ?V) (or (and (= ?U POClerk) (= ?V p3)) (or (and (= ?U FinClerk) (= ?V p4)) (or (and (= ?U POAdmin) (or (= ?V p1) (= ?V p3))) (or (and (= ?U FinAdmin) (or (= ?V p5) (= ?V p4))) (or (and (= ?U Client) (or (= ?V p6) (= ?V p2))) (and (= ?U Manager) (or (= ?V p1) (or (= ?V p3) (or (= ?V p4) (= ?V p5)))))))))))))\n \n\n;assumption 31\n(assert\n(forall ((?U Id) (?V Action)) (iff (has_permission ?U ?V) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p1) (permission p1 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p2) (permission p2 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p3) (permission p3 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p4) (permission p4 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p5) (permission p5 ?V))) (or (and (user_role_assign ?U Manager) (and (role_permission_assign Manager p6) (permission p6 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p1) (permission p1 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p2) (permission p2 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p3) (permission p3 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p4) (permission p4 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p5) (permission p5 ?V))) (or (and (user_role_assign ?U POClerk) (and (role_permission_assign POClerk p6) (permission p6 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p1) (permission p1 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p2) (permission p2 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p3) (permission p3 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p4) (permission p4 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p5) (permission p5 ?V))) (or (and (user_role_assign ?U FinClerk) (and (role_permission_assign FinClerk p6) (permission p6 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p1) (permission p1 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p2) (permission p2 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p3) (permission p3 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p4) (permission p4 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p5) (permission p5 ?V))) (or (and (user_role_assign ?U FinAdmin) (and (role_permission_assign FinAdmin p6) (permission p6 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p1) (permission p1 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p2) (permission p2 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p3) (permission p3 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p4) (permission p4 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p5) (permission p5 ?V))) (or (and (user_role_assign ?U POAdmin) (and (role_permission_assign POAdmin p6) (permission p6 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p1) (permission p1 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p2) (permission p2 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p3) (permission p3 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p4) (permission p4 ?V))) (or (and (user_role_assign ?U Client) (and (role_permission_assign Client p5) (permission p5 ?V))) (and (user_role_assign ?U Client) (and (role_permission_assign Client p6) (permission p6 ?V)))))))))))))))))))))))))))))))))))))))))\n \n\n;assumption 32\n(assert\n(forall ((?U Role) (?V Role)) (iff (role_le ?U ?V) (< (role_level ?U) (role_level ?V)))))\n \n\n;assumption 33\n(assert\n(= (role_level Manager) 3))\n\n;assumption 34\n(assert\n(= (role_level FinAdmin) 2))\n\n;assumption 35\n(assert\n(= (role_level FinClerk) 1))\n\n;assumption 36\n(assert\n(= (role_level POAdmin) 2))\n\n;assumption 37\n(assert\n(= (role_level POClerk) 1))\n\n;assumption 38\n(assert\n(= (role_level Client) 0))\n\n;assumption 39\n(assert\n(forall ((?U Id) (?V Id)) (implies (= (id2int ?U) (id2int ?V)) (= ?U ?V))))\n \n\n;assumption 40\n(assert\n(forall ((?U Id)) (and (<= 1 (id2int ?U)) (<= (id2int ?U) 7))))\n \n\n;assumption 41\n(assert\n(= (id2int id1) 1))\n\n;assumption 42\n(assert\n(= (id2int id2) 2))\n\n;assumption 43\n(assert\n(= (id2int id3) 3))\n\n;assumption 44\n(assert\n(= (id2int id4) 4))\n\n;assumption 45\n(assert\n(= (id2int id5) 5))\n\n;assumption 46\n(assert\n(= (id2int id6) 6))\n\n;assumption 47\n(assert\n(= (id2int id7) 7))\n\n;assumption 48\n(assert\n(iff initial_wf_0 (and (= p1_final_0 0) (and (= p2_final_0 0) (and (= p3_running_0 0) (and (= p4_final_0 0) (and (= p5_final_0 0) (and (= p6_initial_0 0) (and (= p7_final_0 0) (and (= p8_initial_0 0) (and (= p9_initial_0 1) (and (= p10_final_0 0) (and (= p11_final_0 0) (and (= in_customer_crtPO_0 1) (and (= in_creator_ctrPay_0 1) (and (= out_approverPO_apprPO_0 0) (and (= out_approverPOPayment_apprPay_0 0) (and (= out_creator_ctrPay_0 0) (and (= out_signerGRN_ctrsignGRN_0 0) (= out_signerGRN_signGRN_0 0))))))))))))))))))))\n\n;assumption 49\n(assert\n(iff initial_pm_0 (forall ((?U Id) (?V Action)) (iff (executed_0 ?U ?V) false))\n ))\n\n;assumption 50\n(assert\n(forall ((?U Id) (?V Action)) (iff (can_exec_0 ?U ?V) (or (and (= ?V t5_invoke) (and (has_permission ?U t5_invoke) (or (and (not (= ?U id1)) (executed_0 id1 t2_invoke)) (or (and (not (= ?U id2)) (executed_0 id2 t2_invoke)) (or (and (not (= ?U id3)) (executed_0 id3 t2_invoke)) (or (and (not (= ?U id4)) (executed_0 id4 t2_invoke)) (or (and (not (= ?U id5)) (executed_0 id5 t2_invoke)) (or (and (not (= ?U id6)) (executed_0 id6 t2_invoke)) (and (not (= ?U id7)) (executed_0 id7 t2_invoke)))))))))) (or (and (= ?V t6_invoke) (and (and (has_permission ?U t6_invoke) (or (and (not (= ?U id1)) (executed_0 id1 t2_invoke)) (or (and (not (= ?U id2)) (executed_0 id2 t2_invoke)) (or (and (not (= ?U id3)) (executed_0 id3 t2_invoke)) (or (and (not (= ?U id4)) (executed_0 id4 t2_invoke)) (or (and (not (= ?U id5)) (executed_0 id5 t2_invoke)) (or (and (not (= ?U id6)) (executed_0 id6 t2_invoke)) (and (not (= ?U id7)) (executed_0 id7 t2_invoke))))))))) (and (has_permission ?U t6_invoke) (or (and (not (= ?U id1)) (executed_0 id1 t5_invoke)) (or (and (not (= ?U id2)) (executed_0 id2 t5_invoke)) (or (and (not (= ?U id3)) (executed_0 id3 t5_invoke)) (or (and (not (= ?U id4)) (executed_0 id4 t5_invoke)) (or (and (not (= ?U id5)) (executed_0 id5 t5_invoke)) (or (and (not (= ?U id6)) (executed_0 id6 t5_invoke)) (and (not (= ?U id7)) (executed_0 id7 t5_invoke))))))))))) (or (and (= ?V t9_invoke) (and (has_permission ?U t9_invoke) (exists ((?W Role)) (and (user_role_assign ?U ?W) (and (or (and (user_role_assign id1 Manager) (and (role_le Manager ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 Manager) (and (role_le Manager ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 Manager) (and (role_le Manager ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 Manager) (and (role_le Manager ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 Manager) (and (role_le Manager ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 Manager) (and (role_le Manager ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 Manager) (and (role_le Manager ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 POClerk) (and (role_le POClerk ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 POClerk) (and (role_le POClerk ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 POClerk) (and (role_le POClerk ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 POClerk) (and (role_le POClerk ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 POClerk) (and (role_le POClerk ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 POClerk) (and (role_le POClerk ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 POClerk) (and (role_le POClerk ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 FinClerk) (and (role_le FinClerk ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 FinClerk) (and (role_le FinClerk ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 FinClerk) (and (role_le FinClerk ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 FinClerk) (and (role_le FinClerk ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 FinClerk) (and (role_le FinClerk ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 FinClerk) (and (role_le FinClerk ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 FinClerk) (and (role_le FinClerk ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 POAdmin) (and (role_le POAdmin ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 POAdmin) (and (role_le POAdmin ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 POAdmin) (and (role_le POAdmin ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 POAdmin) (and (role_le POAdmin ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 POAdmin) (and (role_le POAdmin ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 POAdmin) (and (role_le POAdmin ?W) (executed_0 id6 t7_invokeO))) (or (and (user_role_assign id7 POAdmin) (and (role_le POAdmin ?W) (executed_0 id7 t7_invokeO))) (or (and (user_role_assign id1 Client) (and (role_le Client ?W) (executed_0 id1 t7_invokeO))) (or (and (user_role_assign id2 Client) (and (role_le Client ?W) (executed_0 id2 t7_invokeO))) (or (and (user_role_assign id3 Client) (and (role_le Client ?W) (executed_0 id3 t7_invokeO))) (or (and (user_role_assign id4 Client) (and (role_le Client ?W) (executed_0 id4 t7_invokeO))) (or (and (user_role_assign id5 Client) (and (role_le Client ?W) (executed_0 id5 t7_invokeO))) (or (and (user_role_assign id6 Client) (and (role_le Client ?W) (executed_0 id6 t7_invokeO))) (and (user_role_assign id7 Client) (and (role_le Client ?W) (executed_0 id7 t7_invokeO)))))))))))))))))))))))))))))))))))))))))))) (or (and (user_role_assign id1 Manager) (and (role_le Manager ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 Manager) (and (role_le Manager ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 Manager) (and (role_le Manager ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 Manager) (and (role_le Manager ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 Manager) (and (role_le Manager ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 Manager) (and (role_le Manager ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 Manager) (and (role_le Manager ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 POClerk) (and (role_le POClerk ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 POClerk) (and (role_le POClerk ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 POClerk) (and (role_le POClerk ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 POClerk) (and (role_le POClerk ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 POClerk) (and (role_le POClerk ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 POClerk) (and (role_le POClerk ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 POClerk) (and (role_le POClerk ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 FinClerk) (and (role_le FinClerk ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 FinClerk) (and (role_le FinClerk ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 FinClerk) (and (role_le FinClerk ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 FinClerk) (and (role_le FinClerk ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 FinClerk) (and (role_le FinClerk ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 FinClerk) (and (role_le FinClerk ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 FinClerk) (and (role_le FinClerk ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 FinAdmin) (and (role_le FinAdmin ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 POAdmin) (and (role_le POAdmin ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 POAdmin) (and (role_le POAdmin ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 POAdmin) (and (role_le POAdmin ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 POAdmin) (and (role_le POAdmin ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 POAdmin) (and (role_le POAdmin ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 POAdmin) (and (role_le POAdmin ?W) (executed_0 id6 t8_invokeI))) (or (and (user_role_assign id7 POAdmin) (and (role_le POAdmin ?W) (executed_0 id7 t8_invokeI))) (or (and (user_role_assign id1 Client) (and (role_le Client ?W) (executed_0 id1 t8_invokeI))) (or (and (user_role_assign id2 Client) (and (role_le Client ?W) (executed_0 id2 t8_invokeI))) (or (and (user_role_assign id3 Client) (and (role_le Client ?W) (executed_0 id3 t8_invokeI))) (or (and (user_role_assign id4 Client) (and (role_le Client ?W) (executed_0 id4 t8_invokeI))) (or (and (user_role_assign id5 Client) (and (role_le Client ?W) (executed_0 id5 t8_invokeI))) (or (and (user_role_assign id6 Client) (and (role_le Client ?W) (executed_0 id6 t8_invokeI))) (and (user_role_assign id7 Client) (and (role_le Client ?W) (executed_0 id7 t8_invokeI))))))))))))))))))))))))))))))))))))))))))))) )) )) (or (and (= ?V t1_receive) (has_permission ?U t1_receive)) (or (and (= ?V t2_invoke) (has_permission ?U t2_invoke)) (or (and (= ?V t7_invokeO) (has_permission ?U t7_invokeO)) (and (= ?V t8_invokeI) (has_permission ?U t8_invokeI)))))))))))\n \n\n;assumption 51\n(assert\n(forall ((?U Id) (?V Action)) (iff (can_exec_1 ?U ?V) (or (and (= ?V t5_invoke) (and (has_permission ?U t5_invoke) (or (and (not (= ?U id1)) (executed_1 id1 t2_invoke)) (or (and (not (= ?U id2)) (executed_1 id2 t2_invoke)) (or (and (not (= ?U id3)) (executed_1 id3 t2_invoke)) (or (and (not (= ?U id4)) (executed_1 id4 t2_invoke)) (or (and (not (= ?U id5)) (executed_1 id5 t2_invoke)) (or (and (not (= ?U id6)) (executed_1 id6 t2_invoke)) (and (not (= ?U id7)) (executed_1 id7 t2_invoke)))))))))) (or (and (= ?V t6_invoke) (and (and (has_permission ?U t6_invoke) (or (and (not (= ?U id1)) (executed_1 id1 t2_invoke)) (or (and (not (= ?U id2)) (executed_1 id2 t2_invoke)) (or (and (not (= ?U id3)) (executed_1 id3 t2_invoke)) (or (and (not (= ?U id4)) (executed_1 id4 t2_invoke)) (or (and (not (= ?U id5)) (executed_1 id5 t2_invoke)) (or (and (not (= ?U id6)) (executed_1 id6 t2_invoke)) (and (not (= ?U id7)) (executed_1 id7 t2_invoke))))))))) (and (has_permission ?U t6_invoke) (or (and (not (= ?U id1)) (executed_1 id1 t5_invoke)) (or (and (not (= ?U id2)) (executed_1 id2 t5_invoke)) (or (and (not (= ?U id3)) (executed_1 id3 t5_invoke)) (or (and (not (= ?U id4)) (executed_1 id4 t5_invoke)) (or (and (not (= ?U id5)) (executed_1 id5 t5_invoke)) (or (and (not (= ?U id6)) (executed_1 id6 t5_invoke)) (and (not (= ?U id7)) (executed_1 id7 t5_invoke))))))))))) (or (and (= ?V t9_invoke) (and (has_permission ?U t9_invoke) (exists ((?W Role)) (and (user_role_assign ?U ?W) (and (or (and (user_role_assign id1 Manager) (and (role_le Manager ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 Manager) (and (role_le Manager ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 Manager) (and (role_le Manager ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 Manager) (and (role_le Manager ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 Manager) (and (role_le Manager ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 Manager) (and (role_le Manager ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 Manager) (and (role_le Manager ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 POClerk) (and (role_le POClerk ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 POClerk) (and (role_le POClerk ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 POClerk) (and (role_le POClerk ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 POClerk) (and (role_le POClerk ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 POClerk) (and (role_le POClerk ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 POClerk) (and (role_le POClerk ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 POClerk) (and (role_le POClerk ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 FinClerk) (and (role_le FinClerk ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 FinClerk) (and (role_le FinClerk ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 FinClerk) (and (role_le FinClerk ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 FinClerk) (and (role_le FinClerk ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 FinClerk) (and (role_le FinClerk ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 FinClerk) (and (role_le FinClerk ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 FinClerk) (and (role_le FinClerk ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 POAdmin) (and (role_le POAdmin ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 POAdmin) (and (role_le POAdmin ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 POAdmin) (and (role_le POAdmin ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 POAdmin) (and (role_le POAdmin ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 POAdmin) (and (role_le POAdmin ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 POAdmin) (and (role_le POAdmin ?W) (executed_1 id6 t7_invokeO))) (or (and (user_role_assign id7 POAdmin) (and (role_le POAdmin ?W) (executed_1 id7 t7_invokeO))) (or (and (user_role_assign id1 Client) (and (role_le Client ?W) (executed_1 id1 t7_invokeO))) (or (and (user_role_assign id2 Client) (and (role_le Client ?W) (executed_1 id2 t7_invokeO))) (or (and (user_role_assign id3 Client) (and (role_le Client ?W) (executed_1 id3 t7_invokeO))) (or (and (user_role_assign id4 Client) (and (role_le Client ?W) (executed_1 id4 t7_invokeO))) (or (and (user_role_assign id5 Client) (and (role_le Client ?W) (executed_1 id5 t7_invokeO))) (or (and (user_role_assign id6 Client) (and (role_le Client ?W) (executed_1 id6 t7_invokeO))) (and (user_role_assign id7 Client) (and (role_le Client ?W) (executed_1 id7 t7_invokeO)))))))))))))))))))))))))))))))))))))))))))) (or (and (user_role_assign id1 Manager) (and (role_le Manager ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 Manager) (and (role_le Manager ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 Manager) (and (role_le Manager ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 Manager) (and (role_le Manager ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 Manager) (and (role_le Manager ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 Manager) (and (role_le Manager ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 Manager) (and (role_le Manager ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 POClerk) (and (role_le POClerk ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 POClerk) (and (role_le POClerk ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 POClerk) (and (role_le POClerk ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 POClerk) (and (role_le POClerk ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 POClerk) (and (role_le POClerk ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 POClerk) (and (role_le POClerk ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 POClerk) (and (role_le POClerk ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 FinClerk) (and (role_le FinClerk ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 FinClerk) (and (role_le FinClerk ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 FinClerk) (and (role_le FinClerk ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 FinClerk) (and (role_le FinClerk ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 FinClerk) (and (role_le FinClerk ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 FinClerk) (and (role_le FinClerk ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 FinClerk) (and (role_le FinClerk ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 FinAdmin) (and (role_le FinAdmin ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 POAdmin) (and (role_le POAdmin ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 POAdmin) (and (role_le POAdmin ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 POAdmin) (and (role_le POAdmin ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 POAdmin) (and (role_le POAdmin ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 POAdmin) (and (role_le POAdmin ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 POAdmin) (and (role_le POAdmin ?W) (executed_1 id6 t8_invokeI))) (or (and (user_role_assign id7 POAdmin) (and (role_le POAdmin ?W) (executed_1 id7 t8_invokeI))) (or (and (user_role_assign id1 Client) (and (role_le Client ?W) (executed_1 id1 t8_invokeI))) (or (and (user_role_assign id2 Client) (and (role_le Client ?W) (executed_1 id2 t8_invokeI))) (or (and (user_role_assign id3 Client) (and (role_le Client ?W) (executed_1 id3 t8_invokeI))) (or (and (user_role_assign id4 Client) (and (role_le Client ?W) (executed_1 id4 t8_invokeI))) (or (and (user_role_assign id5 Client) (and (role_le Client ?W) (executed_1 id5 t8_invokeI))) (or (and (user_role_assign id6 Client) (and (role_le Client ?W) (executed_1 id6 t8_invokeI))) (and (user_role_assign id7 Client) (and (role_le Client ?W) (executed_1 id7 t8_invokeI))))))))))))))))))))))))))))))))))))))))))))) )) )) (or (and (= ?V t1_receive) (has_permission ?U t1_receive)) (or (and (= ?V t2_invoke) (has_permission ?U t2_invoke)) (or (and (= ?V t7_invokeO) (has_permission ?U t7_invokeO)) (and (= ?V t8_invokeI) (has_permission ?U t8_invokeI)))))))))))\n \n\n;assumption 52\n(assert\n(forall ((?U Id)) (iff (t1_receive_0_1 ?U)\n (and (and (can_exec_0 ?U t1_receive) (and (<= 1 in_customer_crtPO_0) (<= 1 p9_initial_0)))\n (and (and (= p1_final_1 p1_final_0) (and (= p2_final_1 p2_final_0) (and (= p3_running_1 p3_running_0) (and (= p4_final_1 p4_final_0) (and (= p5_final_1 p5_final_0) (and (= p6_initial_1 p6_initial_0) (and (= p7_final_1 p7_final_0) (and (= p8_initial_1 p8_initial_0) (and (= p9_initial_1 (+ (~ 1) p9_initial_0)) (and (= p10_final_1 (+ 1 p10_final_0)) (and (= p11_final_1 p11_final_0) (and (= in_customer_crtPO_1 (+ (~ 1) in_customer_crtPO_0)) (and (= in_creator_ctrPay_1 in_creator_ctrPay_0) (and (= out_creator_ctrPay_1 out_creator_ctrPay_0) (and (= out_approverPOPayment_apprPay_1 out_approverPOPayment_apprPay_0) (and (= out_approverPO_apprPO_1 out_approverPO_apprPO_0) (and (= out_signerGRN_signGRN_1 out_signerGRN_signGRN_0) (and (= out_signerGRN_ctrsignGRN_1 out_signerGRN_ctrsignGRN_0) true))))))))))))))))))\n (forall ((?V Id) (?W Action)) (iff (executed_1 ?V ?W) (or (and (= ?V ?U) (= ?W t1_receive)) (executed_0 ?V ?W))))\n )\n )\n )))\n \n\n;assumption 53\n(assert \n (not (and initial_wf_0 (and initial_pm_0 (t1_receive_0_1 id6))))\n )\n\n(set-info :status sat)\n(check-sat)\n(get-model)",result:{output:"sat\n(\n ;; universe for Permission:\n ;; Permission!val!0 Permission!val!5 Permission!val!2 Permission!val!1 Permission!val!3 Permission!val!4 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Permission!val!0 () Permission)\n (declare-fun Permission!val!5 () Permission)\n (declare-fun Permission!val!2 () Permission)\n (declare-fun Permission!val!1 () Permission)\n (declare-fun Permission!val!3 () Permission)\n (declare-fun Permission!val!4 () Permission)\n ;; cardinality constraint:\n (forall ((x Permission))\n (or (= x Permission!val!0)\n (= x Permission!val!5)\n (= x Permission!val!2)\n (= x Permission!val!1)\n (= x Permission!val!3)\n (= x Permission!val!4)))\n ;; -----------\n ;; universe for Action:\n ;; Action!val!5 Action!val!0 Action!val!2 Action!val!4 Action!val!7 Action!val!8 Action!val!1 Action!val!3 Action!val!6 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Action!val!5 () Action)\n (declare-fun Action!val!0 () Action)\n (declare-fun Action!val!2 () Action)\n (declare-fun Action!val!4 () Action)\n (declare-fun Action!val!7 () Action)\n (declare-fun Action!val!8 () Action)\n (declare-fun Action!val!1 () Action)\n (declare-fun Action!val!3 () Action)\n (declare-fun Action!val!6 () Action)\n ;; cardinality constraint:\n (forall ((x Action))\n (or (= x Action!val!5)\n (= x Action!val!0)\n (= x Action!val!2)\n (= x Action!val!4)\n (= x Action!val!7)\n (= x Action!val!8)\n (= x Action!val!1)\n (= x Action!val!3)\n (= x Action!val!6)))\n ;; -----------\n ;; universe for Id:\n ;; Id!val!5 Id!val!2 Id!val!0 Id!val!3 Id!val!6 Id!val!1 Id!val!4 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Id!val!5 () Id)\n (declare-fun Id!val!2 () Id)\n (declare-fun Id!val!0 () Id)\n (declare-fun Id!val!3 () Id)\n (declare-fun Id!val!6 () Id)\n (declare-fun Id!val!1 () Id)\n (declare-fun Id!val!4 () Id)\n ;; cardinality constraint:\n (forall ((x Id))\n (or (= x Id!val!5)\n (= x Id!val!2)\n (= x Id!val!0)\n (= x Id!val!3)\n (= x Id!val!6)\n (= x Id!val!1)\n (= x Id!val!4)))\n ;; -----------\n ;; universe for Role:\n ;; Role!val!3 Role!val!4 Role!val!0 Role!val!2 Role!val!5 Role!val!1 \n ;; -----------\n ;; definitions for universe elements:\n (declare-fun Role!val!3 () Role)\n (declare-fun Role!val!4 () Role)\n (declare-fun Role!val!0 () Role)\n (declare-fun Role!val!2 () Role)\n (declare-fun Role!val!5 () Role)\n (declare-fun Role!val!1 () Role)\n ;; cardinality constraint:\n (forall ((x Role))\n (or (= x Role!val!3)\n (= x Role!val!4)\n (= x Role!val!0)\n (= x Role!val!2)\n (= x Role!val!5)\n (= x Role!val!1)))\n ;; -----------\n (define-fun out_signerGRN_signGRN_1 () Int\n 2)\n (define-fun p10_final_1 () Int\n 3)\n (define-fun p3_running_1 () Int\n 2)\n (define-fun t9_invoke () Action\n Action!val!8)\n (define-fun id5 () Id\n Id!val!4)\n (define-fun out_signerGRN_ctrsignGRN_1 () Int\n 2)\n (define-fun p11_final_1 () Int\n 2)\n (define-fun p4_final_1 () Int\n 2)\n (define-fun t6_invoke () Action\n Action!val!5)\n (define-fun t1_receive () Action\n Action!val!0)\n (define-fun POClerk () Role\n Role!val!4)\n (define-fun t5_invoke () Action\n Action!val!4)\n (define-fun in_customer_crtPO_1 () Int\n 8)\n (define-fun FinClerk () Role\n Role!val!2)\n (define-fun POAdmin () Role\n Role!val!3)\n (define-fun p5 () Permission\n Permission!val!4)\n (define-fun p2 () Permission\n Permission!val!1)\n (define-fun t3_split () Action\n Action!val!2)\n (define-fun id2 () Id\n Id!val!1)\n (define-fun Client () Role\n Role!val!5)\n (define-fun id1 () Id\n Id!val!0)\n (define-fun id6 () Id\n Id!val!5)\n (define-fun id7 () Id\n Id!val!6)\n (define-fun in_creator_ctrPay_1 () Int\n 3)\n (define-fun p6_initial_1 () Int\n 2)\n (define-fun t7_invokeO () Action\n Action!val!6)\n (define-fun p5_final_1 () Int\n 2)\n (define-fun p3 () Permission\n Permission!val!2)\n (define-fun in_customer_crtPO_0 () Int\n 8)\n (define-fun FinAdmin () Role\n Role!val!1)\n (define-fun t2_invoke () Action\n Action!val!1)\n (define-fun out_creator_ctrPay_1 () Int\n 2)\n (define-fun p1 () Permission\n Permission!val!0)\n (define-fun p7_final_1 () Int\n 2)\n (define-fun p9_initial_0 () Int\n 2)\n (define-fun out_approverPOPayment_apprPay_1 () Int\n 2)\n (define-fun t4_join () Action\n Action!val!3)\n (define-fun p8_initial_1 () Int\n 2)\n (define-fun id4 () Id\n Id!val!3)\n (define-fun p1_final_1 () Int\n 2)\n (define-fun Manager () Role\n Role!val!0)\n (define-fun p4 () Permission\n Permission!val!3)\n (define-fun p6 () Permission\n Permission!val!5)\n (define-fun t8_invokeI () Action\n Action!val!7)\n (define-fun out_approverPO_apprPO_1 () Int\n 2)\n (define-fun p9_initial_1 () Int\n 2)\n (define-fun p2_final_1 () Int\n 2)\n (define-fun id3 () Id\n Id!val!2)\n (define-fun out_signerGRN_signGRN_0 () Int\n 1)\n (define-fun out_signerGRN_ctrsignGRN_0 () Int\n 1)\n (define-fun out_creator_ctrPay_0 () Int\n 1)\n (define-fun out_approverPOPayment_apprPay_0 () Int\n 1)\n (define-fun out_approverPO_apprPO_0 () Int\n 1)\n (define-fun in_creator_ctrPay_0 () Int\n 2)\n (define-fun p11_final_0 () Int\n 1)\n (define-fun p10_final_0 () Int\n 1)\n (define-fun p8_initial_0 () Int\n 1)\n (define-fun p7_final_0 () Int\n 1)\n (define-fun p6_initial_0 () Int\n 1)\n (define-fun p5_final_0 () Int\n 1)\n (define-fun p4_final_0 () Int\n 1)\n (define-fun p3_running_0 () Int\n 1)\n (define-fun p2_final_0 () Int\n 1)\n (define-fun p1_final_0 () Int\n 1)\n (define-fun initial_wf_0 () Bool\n false)\n (define-fun initial_pm_0 () Bool\n true)\n (define-fun role2int ((x!0 Role)) Int\n (let ((a!1 (ite (and (= x!0 Role!val!0)\n (not (= x!0 Role!val!1))\n (not (= x!0 Role!val!2))\n (not (= x!0 Role!val!3)))\n 1\n 11)))\n (let ((a!2 (ite (and (= x!0 Role!val!1)\n (not (= x!0 Role!val!2))\n (not (= x!0 Role!val!3)))\n 2\n a!1)))\n (let ((a!3 (ite (and (= x!0 Role!val!2) (not (= x!0 Role!val!3))) 3 a!2)))\n (let ((a!4 (ite (and (not (= x!0 Role!val!5))\n (not (= x!0 Role!val!0))\n (not (= x!0 Role!val!1))\n (not (= x!0 Role!val!2))\n (not (= x!0 Role!val!3)))\n 5\n (ite (= x!0 Role!val!3) 4 a!3))))\n (ite (and (= x!0 Role!val!5)\n (not (= x!0 Role!val!0))\n (not (= x!0 Role!val!1))\n (not (= x!0 Role!val!2))\n (not (= x!0 Role!val!3)))\n 6\n a!4))))))\n (define-fun user_role_assign ((x!0 Id) (x!1 Role)) Bool\n (or (and (= x!0 Id!val!5) (= x!1 Role!val!5))\n (and (= x!0 Id!val!4) (= x!1 Role!val!4))\n (and (= x!0 Id!val!3) (= x!1 Role!val!3))\n (and (= x!0 Id!val!2) (= x!1 Role!val!2))\n (and (= x!0 Id!val!1) (= x!1 Role!val!1))\n (and (= x!0 Id!val!0) (= x!1 Role!val!0))\n (and (= x!0 Id!val!6) (= x!1 Role!val!0))))\n (define-fun has_permission ((x!0 Id) (x!1 Action)) Bool\n (or (and (or (= x!0 Id!val!0) (= x!0 Id!val!6)) (= x!1 Action!val!1))\n (and (or (= x!0 Id!val!0) (= x!0 Id!val!6)) (= x!1 Action!val!5))\n (and (or (= x!0 Id!val!0) (= x!0 Id!val!6))\n (or (= x!1 Action!val!7) (= x!1 Action!val!6)))\n (and (or (= x!0 Id!val!0) (= x!0 Id!val!6)) (= x!1 Action!val!8))\n (and (= x!0 Id!val!4) (= x!1 Action!val!5))\n (and (= x!0 Id!val!2) (or (= x!1 Action!val!7) (= x!1 Action!val!6)))\n (and (= x!0 Id!val!1) (or (= x!1 Action!val!7) (= x!1 Action!val!6)))\n (and (= x!0 Id!val!1) (= x!1 Action!val!8))\n (and (= x!0 Id!val!3) (= x!1 Action!val!1))\n (and (= x!0 Id!val!3) (= x!1 Action!val!5))\n (and (= x!0 Id!val!5) (= x!1 Action!val!4))\n (and (= x!0 Id!val!5) (= x!1 Action!val!0))))\n (define-fun permission2int ((x!0 Permission)) Int\n (let ((a!1 (ite (and (not (= x!0 Permission!val!3))\n (not (= x!0 Permission!val!2))\n (not (= x!0 Permission!val!5))\n (not (= x!0 Permission!val!4))\n (not (= x!0 Permission!val!0)))\n 2\n (ite (= x!0 Permission!val!0) 1 10))))\n (let ((a!2 (ite (and (= x!0 Permission!val!2)\n (not (= x!0 Permission!val!5))\n (not (= x!0 Permission!val!4))\n (not (= x!0 Permission!val!0)))\n 3\n a!1)))\n (let ((a!3 (ite (and (= x!0 Permission!val!3)\n (not (= x!0 Permission!val!2))\n (not (= x!0 Permission!val!5))\n (not (= x!0 Permission!val!4))\n (not (= x!0 Permission!val!0)))\n 4\n a!2)))\n (let ((a!4 (ite (and (= x!0 Permission!val!4)\n (not (= x!0 Permission!val!0)))\n 5\n a!3)))\n (ite (and (= x!0 Permission!val!5)\n (not (= x!0 Permission!val!4))\n (not (= x!0 Permission!val!0)))\n 6\n a!4))))))\n (define-fun permission ((x!0 Permission) (x!1 Action)) Bool\n (or (and (= x!0 Permission!val!5) (= x!1 Action!val!0))\n (and (= x!0 Permission!val!4) (= x!1 Action!val!8))\n (and (= x!0 Permission!val!3)\n (or (= x!1 Action!val!6) (= x!1 Action!val!7)))\n (and (= x!0 Permission!val!2) (= x!1 Action!val!5))\n (and (= x!0 Permission!val!1) (= x!1 Action!val!4))\n (and (= x!0 Permission!val!0) (= x!1 Action!val!1))))\n (define-fun id2int ((x!0 Id)) Int\n (let ((a!1 (ite (and (= x!0 Id!val!0)\n (not (= x!0 Id!val!6))\n (not (= x!0 Id!val!1))\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 1\n 13)))\n (let ((a!2 (ite (and (= x!0 Id!val!1)\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 2\n a!1)))\n (let ((a!3 (ite (and (= x!0 Id!val!3)\n (not (= x!0 Id!val!0))\n (not (= x!0 Id!val!6))\n (not (= x!0 Id!val!1))\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 4\n (ite (= x!0 Id!val!2) 3 a!2))))\n (let ((a!4 (ite (and (not (= x!0 Id!val!3))\n (not (= x!0 Id!val!0))\n (not (= x!0 Id!val!6))\n (not (= x!0 Id!val!1))\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 5\n a!3)))\n (let ((a!5 (ite (and (= x!0 Id!val!5) (not (= x!0 Id!val!2))) 6 a!4)))\n (ite (and (= x!0 Id!val!6)\n (not (= x!0 Id!val!1))\n (not (= x!0 Id!val!5))\n (not (= x!0 Id!val!2)))\n 7\n a!5)))))))\n (define-fun t1_receive_0_1 ((x!0 Id)) Bool\n false)\n (define-fun action2int ((x!0 Action)) Int\n (let ((a!1 (ite (and (not (= x!0 Action!val!6))\n (not (= x!0 Action!val!4))\n (not (= x!0 Action!val!1))\n (not (= x!0 Action!val!8))\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 1\n 12)))\n (let ((a!2 (ite (and (= x!0 Action!val!1)\n (not (= x!0 Action!val!8))\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 2\n a!1)))\n (let ((a!3 (ite (and (= x!0 Action!val!2)\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 3\n a!2)))\n (let ((a!4 (ite (and (= x!0 Action!val!4)\n (not (= x!0 Action!val!1))\n (not (= x!0 Action!val!8))\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 5\n (ite (= x!0 Action!val!3) 4 a!3))))\n (let ((a!5 (ite (and (= x!0 Action!val!5) (not (= x!0 Action!val!3))) 6 a!4)))\n (let ((a!6 (ite (and (= x!0 Action!val!6)\n (not (= x!0 Action!val!4))\n (not (= x!0 Action!val!1))\n (not (= x!0 Action!val!8))\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 7\n a!5)))\n (let ((a!7 (ite (and (= x!0 Action!val!7)\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 8\n a!6)))\n (ite (and (= x!0 Action!val!8)\n (not (= x!0 Action!val!2))\n (not (= x!0 Action!val!7))\n (not (= x!0 Action!val!5))\n (not (= x!0 Action!val!3)))\n 9\n a!7)))))))))\n (define-fun executed_0 ((x!0 Id) (x!1 Action)) Bool\n false)\n (define-fun role_level ((x!0 Role)) Int\n (ite (= x!0 Role!val!0) 3\n (ite (= x!0 Role!val!2) 1\n (ite (= x!0 Role!val!4) 1\n (ite (= x!0 Role!val!5) 0\n 2)))))\n (define-fun can_exec_0 ((x!0 Id) (x!1 Action)) Bool\n (let ((a!1 (exists ((?W Role))\n (let ((a!1 (>= (+ (role_level Manager)\n (* (- 1) (role_level ?W)))\n 0))\n (a!2 (or (= Manager FinAdmin)\n (= id2 id7)\n (= id2 id1)\n (and (= id2 id3) (= Manager FinClerk))\n (and (= id2 id4) (= Manager POAdmin))\n (and (= id2 id5) (= Manager POClerk))\n (and (= id2 id6) (= Manager Client))))\n (a!3 (or (= Manager FinClerk)\n (= id3 id7)\n (= id3 id1)\n (and (= id3 id2) (= Manager FinAdmin))\n (and (= id3 id4) (= Manager POAdmin))\n (and (= id3 id5) (= Manager POClerk))\n (and (= id3 id6) (= Manager Client))))\n (a!4 (or (= Manager POAdmin)\n (= id4 id7)\n (= id4 id1)\n (and (= id4 id2) (= Manager FinAdmin))\n (and (= id4 id3) (= Manager FinClerk))\n (and (= id4 id5) (= Manager POClerk))\n (and (= id4 id6) (= Manager Client))))\n (a!5 (or (= Manager POClerk)\n (= id5 id7)\n (= id5 id1)\n (and (= id5 id2) (= Manager FinAdmin))\n (and (= id5 id3) (= Manager FinClerk))\n (and (= id5 id4) (= Manager POAdmin))\n (and (= id5 id6) (= Manager Client))))\n (a!6 (or (= Manager Client)\n (= id6 id7)\n (= id6 id1)\n (and (= id6 id2) (= Manager FinAdmin))\n (and (= id6 id3) (= Manager FinClerk))\n (and (= id6 id4) (= Manager POAdmin))\n (and (= id6 id5) (= Manager POClerk))))\n (a!7 (or (= POClerk Manager)\n (= id1 id5)\n (and (= id1 id7) (= POClerk Manager))\n (and (= id1 id2) (= POClerk FinAdmin))\n (and (= id1 id3) (= POClerk FinClerk))\n (and (= id1 id4) (= POClerk POAdmin))\n (and (= id1 id6) (= POClerk Client))))\n (a!8 (>= (+ (role_level POClerk)\n (* (- 1) (role_level ?W)))\n 0))\n (a!9 (or (= POClerk FinAdmin)\n (= id2 id5)\n (and (= id2 id7) (= POClerk Manager))\n (and (= id2 id1) (= POClerk Manager))\n (and (= id2 id3) (= POClerk FinClerk))\n (and (= id2 id4) (= POClerk POAdmin))\n (and (= id2 id6) (= POClerk Client))))\n (a!10 (or (= POClerk FinClerk)\n (= id3 id5)\n (and (= id3 id7) (= POClerk Manager))\n (and (= id3 id1) (= POClerk Manager))\n (and (= id3 id2) (= POClerk FinAdmin))\n (and (= id3 id4) (= POClerk POAdmin))\n (and (= id3 id6) (= POClerk Client))))\n (a!11 (or (= POClerk POAdmin)\n (= id4 id5)\n (and (= id4 id7) (= POClerk Manager))\n (and (= id4 id1) (= POClerk Manager))\n (and (= id4 id2) (= POClerk FinAdmin))\n (and (= id4 id3) (= POClerk FinClerk))\n (and (= id4 id6) (= POClerk Client))))\n (a!12 (or (= POClerk Client)\n (= id6 id5)\n (and (= id6 id7) (= POClerk Manager))\n (and (= id6 id1) (= POClerk Manager))\n (and (= id6 id2) (= POClerk FinAdmin))\n (and (= id6 id3) (= POClerk FinClerk))\n (and (= id6 id4) (= POClerk POAdmin))))\n (a!13 (or (= POClerk Manager)\n (= id7 id5)\n (and (= id7 id1) (= POClerk Manager))\n (and (= id7 id2) (= POClerk FinAdmin))\n (and (= id7 id3) (= POClerk FinClerk))\n (and (= id7 id4) (= POClerk POAdmin))\n (and (= id7 id6) (= POClerk Client))))\n (a!14 (or (= FinClerk Manager)\n (= id1 id3)\n (and (= id1 id7) (= FinClerk Manager))\n (and (= id1 id2) (= FinClerk FinAdmin))\n (and (= id1 id4) (= FinClerk POAdmin))\n (and (= id1 id5) (= FinClerk POClerk))\n (and (= id1 id6) (= FinClerk Client))))\n (a!15 (>= (+ (role_level FinClerk)\n (* (- 1) (role_level ?W)))\n 0))\n (a!16 (or (= FinClerk FinAdmin)\n (= id2 id3)\n (and (= id2 id7) (= FinClerk Manager))\n (and (= id2 id1) (= FinClerk Manager))\n (and (= id2 id4) (= FinClerk POAdmin))\n (and (= id2 id5) (= FinClerk POClerk))\n (and (= id2 id6) (= FinClerk Client))))\n (a!17 (or (= FinClerk POAdmin)\n (= id4 id3)\n (and (= id4 id7) (= FinClerk Manager))\n (and (= id4 id1) (= FinClerk Manager))\n (and (= id4 id2) (= FinClerk FinAdmin))\n (and (= id4 id5) (= FinClerk POClerk))\n (and (= id4 id6) (= FinClerk Client))))\n (a!18 (or (= FinClerk POClerk)\n (= id5 id3)\n (and (= id5 id7) (= FinClerk Manager))\n (and (= id5 id1) (= FinClerk Manager))\n (and (= id5 id2) (= FinClerk FinAdmin))\n (and (= id5 id4) (= FinClerk POAdmin))\n (and (= id5 id6) (= FinClerk Client))))\n (a!19 (or (= FinClerk Client)\n (= id6 id3)\n (and (= id6 id7) (= FinClerk Manager))\n (and (= id6 id1) (= FinClerk Manager))\n (and (= id6 id2) (= FinClerk FinAdmin))\n (and (= id6 id4) (= FinClerk POAdmin))\n (and (= id6 id5) (= FinClerk POClerk))))\n (a!20 (or (= FinClerk Manager)\n (= id7 id3)\n (and (= id7 id1) (= FinClerk Manager))\n (and (= id7 id2) (= FinClerk FinAdmin))\n (and (= id7 id4) (= FinClerk POAdmin))\n (and (= id7 id5) (= FinClerk POClerk))\n (and (= id7 id6) (= FinClerk Client))))\n (a!21 (or (= FinAdmin Manager)\n (= id1 id2)\n (and (= id1 id7) (= FinAdmin Manager))\n (and (= id1 id3) (= FinAdmin FinClerk))\n (and (= id1 id4) (= FinAdmin POAdmin))\n (and (= id1 id5) (= FinAdmin POClerk))\n (and (= id1 id6) (= FinAdmin Client))))\n (a!22 (>= (+ (role_level FinAdmin)\n (* (- 1) (role_level ?W)))\n 0))\n (a!23 (or (= FinAdmin FinClerk)\n (= id3 id2)\n (and (= id3 id7) (= FinAdmin Manager))\n (and (= id3 id1) (= FinAdmin Manager))\n (and (= id3 id4) (= FinAdmin POAdmin))\n (and (= id3 id5) (= FinAdmin POClerk))\n (and (= id3 id6) (= FinAdmin Client))))\n (a!24 (or (= FinAdmin POAdmin)\n (= id4 id2)\n (and (= id4 id7) (= FinAdmin Manager))\n (and (= id4 id1) (= FinAdmin Manager))\n (and (= id4 id3) (= FinAdmin FinClerk))\n (and (= id4 id5) (= FinAdmin POClerk))\n (and (= id4 id6) (= FinAdmin Client))))\n (a!25 (or (= FinAdmin POClerk)\n (= id5 id2)\n (and (= id5 id7) (= FinAdmin Manager))\n (and (= id5 id1) (= FinAdmin Manager))\n (and (= id5 id3) (= FinAdmin FinClerk))\n (and (= id5 id4) (= FinAdmin POAdmin))\n (and (= id5 id6) (= FinAdmin Client))))\n (a!26 (or (= FinAdmin Client)\n (= id6 id2)\n (and (= id6 id7) (= FinAdmin Manager))\n (and (= id6 id1) (= FinAdmin Manager))\n (and (= id6 id3) (= FinAdmin FinClerk))\n (and (= id6 id4) (= FinAdmin POAdmin))\n (and (= id6 id5) (= FinAdmin POClerk))))\n (a!27 (or (= FinAdmin Manager)\n (= id7 id2)\n (and (= id7 id1) (= FinAdmin Manager))\n (and (= id7 id3) (= FinAdmin FinClerk))\n (and (= id7 id4) (= FinAdmin POAdmin))\n (and (= id7 id5) (= FinAdmin POClerk))\n (and (= id7 id6) (= FinAdmin Client))))\n (a!28 (or (= POAdmin Manager)\n (= id1 id4)\n (and (= id1 id7) (= POAdmin Manager))\n (and (= id1 id2) (= POAdmin FinAdmin))\n (and (= id1 id3) (= POAdmin FinClerk))\n (and (= id1 id5) (= POAdmin POClerk))\n (and (= id1 id6) (= POAdmin Client))))\n (a!29 (>= (+ (role_level POAdmin)\n (* (- 1) (role_level ?W)))\n 0))\n (a!30 (or (= POAdmin FinAdmin)\n (= id2 id4)\n (and (= id2 id7) (= POAdmin Manager))\n (and (= id2 id1) (= POAdmin Manager))\n (and (= id2 id3) (= POAdmin FinClerk))\n (and (= id2 id5) (= POAdmin POClerk))\n (and (= id2 id6) (= POAdmin Client))))\n (a!31 (or (= POAdmin FinClerk)\n (= id3 id4)\n (and (= id3 id7) (= POAdmin Manager))\n (and (= id3 id1) (= POAdmin Manager))\n (and (= id3 id2) (= POAdmin FinAdmin))\n (and (= id3 id5) (= POAdmin POClerk))\n (and (= id3 id6) (= POAdmin Client))))\n (a!32 (or (= POAdmin POClerk)\n (= id5 id4)\n (and (= id5 id7) (= POAdmin Manager))\n (and (= id5 id1) (= POAdmin Manager))\n (and (= id5 id2) (= POAdmin FinAdmin))\n (and (= id5 id3) (= POAdmin FinClerk))\n (and (= id5 id6) (= POAdmin Client))))\n (a!33 (or (= POAdmin Client)\n (= id6 id4)\n (and (= id6 id7) (= POAdmin Manager))\n (and (= id6 id1) (= POAdmin Manager))\n (and (= id6 id2) (= POAdmin FinAdmin))\n (and (= id6 id3) (= POAdmin FinClerk))\n (and (= id6 id5) (= POAdmin POClerk))))\n (a!34 (or (= POAdmin Manager)\n (= id7 id4)\n (and (= id7 id1) (= POAdmin Manager))\n (and (= id7 id2) (= POAdmin FinAdmin))\n (and (= id7 id3) (= POAdmin FinClerk))\n (and (= id7 id5) (= POAdmin POClerk))\n (and (= id7 id6) (= POAdmin Client))))\n (a!35 (or (= Client Manager)\n (= id1 id6)\n (and (= id1 id7) (= Client Manager))\n (and (= id1 id2) (= Client FinAdmin))\n (and (= id1 id3) (= Client FinClerk))\n (and (= id1 id4) (= Client POAdmin))\n (and (= id1 id5) (= Client POClerk))))\n (a!36 (>= (+ (role_level Client)\n (* (- 1) (role_level ?W)))\n 0))\n (a!37 (or (= Client FinAdmin)\n (= id2 id6)\n (and (= id2 id7) (= Client Manager))\n (and (= id2 id1) (= Client Manager))\n (and (= id2 id3) (= Client FinClerk))\n (and (= id2 id4) (= Client POAdmin))\n (and (= id2 id5) (= Client POClerk))))\n (a!38 (or (= Client FinClerk)\n (= id3 id6)\n (and (= id3 id7) (= Client Manager))\n (and (= id3 id1) (= Client Manager))\n (and (= id3 id2) (= Client FinAdmin))\n (and (= id3 id4) (= Client POAdmin))\n (and (= id3 id5) (= Client POClerk))))\n (a!39 (or (= Client POAdmin)\n (= id4 id6)\n (and (= id4 id7) (= Client Manager))\n (and (= id4 id1) (= Client Manager))\n (and (= id4 id2) (= Client FinAdmin))\n (and (= id4 id3) (= Client FinClerk))\n (and (= id4 id5) (= Client POClerk))))\n (a!40 (or (= Client POClerk)\n (= id5 id6)\n (and (= id5 id7) (= Client Manager))\n (and (= id5 id1) (= Client Manager))\n (and (= id5 id2) (= Client FinAdmin))\n (and (= id5 id3) (= Client FinClerk))\n (and (= id5 id4) (= Client POAdmin))))\n (a!41 (or (= Client Manager)\n (= id7 id6)\n (and (= id7 id1) (= Client Manager))\n (and (= id7 id2) (= Client FinAdmin))\n (and (= id7 id3) (= Client FinClerk))\n (and (= id7 id4) (= Client POAdmin))\n (and (= id7 id5) (= Client POClerk)))))\n (and (or (and (= x!0 id7) (= ?W Manager))\n (and (= x!0 id1) (= ?W Manager))\n (and (= x!0 id2) (= ?W FinAdmin))\n (and (= x!0 id3) (= ?W FinClerk))\n (and (= x!0 id4) (= ?W POAdmin))\n (and (= x!0 id5) (= ?W POClerk))\n (and (= x!0 id6) (= ?W Client)))\n (or (and (not a!1) (executed_0 id1 t7_invokeO))\n (and a!2 (not a!1) (executed_0 id2 t7_invokeO))\n (and a!3 (not a!1) (executed_0 id3 t7_invokeO))\n (and a!4 (not a!1) (executed_0 id4 t7_invokeO))\n (and a!5 (not a!1) (executed_0 id5 t7_invokeO))\n (and a!6 (not a!1) (executed_0 id6 t7_invokeO))\n (and (not a!1) (executed_0 id7 t7_invokeO))\n (and a!7 (not a!8) (executed_0 id1 t7_invokeO))\n (and a!9 (not a!8) (executed_0 id2 t7_invokeO))\n (and a!10 (not a!8) (executed_0 id3 t7_invokeO))\n (and a!11 (not a!8) (executed_0 id4 t7_invokeO))\n (and (not a!8) (executed_0 id5 t7_invokeO))\n (and a!12 (not a!8) (executed_0 id6 t7_invokeO))\n (and a!13 (not a!8) (executed_0 id7 t7_invokeO))\n (and a!14 (not a!15) (executed_0 id1 t7_invokeO))\n (and a!16 (not a!15) (executed_0 id2 t7_invokeO))\n (and (not a!15) (executed_0 id3 t7_invokeO))\n (and a!17 (not a!15) (executed_0 id4 t7_invokeO))\n (and a!18 (not a!15) (executed_0 id5 t7_invokeO))\n (and a!19 (not a!15) (executed_0 id6 t7_invokeO))\n (and a!20 (not a!15) (executed_0 id7 t7_invokeO))\n (and a!21 (not a!22) (executed_0 id1 t7_invokeO))\n (and (not a!22) (executed_0 id2 t7_invokeO))\n (and a!23 (not a!22) (executed_0 id3 t7_invokeO))\n (and a!24 (not a!22) (executed_0 id4 t7_invokeO))\n (and a!25 (not a!22) (executed_0 id5 t7_invokeO))\n (and a!26 (not a!22) (executed_0 id6 t7_invokeO))\n (and a!27 (not a!22) (executed_0 id7 t7_invokeO))\n (and a!28 (not a!29) (executed_0 id1 t7_invokeO))\n (and a!30 (not a!29) (executed_0 id2 t7_invokeO))\n (and a!31 (not a!29) (executed_0 id3 t7_invokeO))\n (and (not a!29) (executed_0 id4 t7_invokeO))\n (and a!32 (not a!29) (executed_0 id5 t7_invokeO))\n (and a!33 (not a!29) (executed_0 id6 t7_invokeO))\n (and a!34 (not a!29) (executed_0 id7 t7_invokeO))\n (and a!35 (not a!36) (executed_0 id1 t7_invokeO))\n (and a!37 (not a!36) (executed_0 id2 t7_invokeO))\n (and a!38 (not a!36) (executed_0 id3 t7_invokeO))\n (and a!39 (not a!36) (executed_0 id4 t7_invokeO))\n (and a!40 (not a!36) (executed_0 id5 t7_invokeO))\n (and (not a!36) (executed_0 id6 t7_invokeO))\n (and a!41 (not a!36) (executed_0 id7 t7_invokeO)))\n (or (and (not a!1) (executed_0 id1 t8_invokeI))\n (and a!2 (not a!1) (executed_0 id2 t8_invokeI))\n (and a!3 (not a!1) (executed_0 id3 t8_invokeI))\n (and a!4 (not a!1) (executed_0 id4 t8_invokeI))\n (and a!5 (not a!1) (executed_0 id5 t8_invokeI))\n (and a!6 (not a!1) (executed_0 id6 t8_invokeI))\n (and (not a!1) (executed_0 id7 t8_invokeI))\n (and a!7 (not a!8) (executed_0 id1 t8_invokeI))\n (and a!9 (not a!8) (executed_0 id2 t8_invokeI))\n (and a!10 (not a!8) (executed_0 id3 t8_invokeI))\n (and a!11 (not a!8) (executed_0 id4 t8_invokeI))\n (and (not a!8) (executed_0 id5 t8_invokeI))\n (and a!12 (not a!8) (executed_0 id6 t8_invokeI))\n (and a!13 (not a!8) (executed_0 id7 t8_invokeI))\n (and a!14 (not a!15) (executed_0 id1 t8_invokeI))\n (and a!16 (not a!15) (executed_0 id2 t8_invokeI))\n (and (not a!15) (executed_0 id3 t8_invokeI))\n (and a!17 (not a!15) (executed_0 id4 t8_invokeI))\n (and a!18 (not a!15) (executed_0 id5 t8_invokeI))\n (and a!19 (not a!15) (executed_0 id6 t8_invokeI))\n (and a!20 (not a!15) (executed_0 id7 t8_invokeI))\n (and a!21 (not a!22) (executed_0 id1 t8_invokeI))\n (and (not a!22) (executed_0 id2 t8_invokeI))\n (and a!23 (not a!22) (executed_0 id3 t8_invokeI))\n (and a!24 (not a!22) (executed_0 id4 t8_invokeI))\n (and a!25 (not a!22) (executed_0 id5 t8_invokeI))\n (and a!26 (not a!22) (executed_0 id6 t8_invokeI))\n (and a!27 (not a!22) (executed_0 id7 t8_invokeI))\n (and a!28 (not a!29) (executed_0 id1 t8_invokeI))\n (and a!30 (not a!29) (executed_0 id2 t8_invokeI))\n (and a!31 (not a!29) (executed_0 id3 t8_invokeI))\n (and (not a!29) (executed_0 id4 t8_invokeI))\n (and a!32 (not a!29) (executed_0 id5 t8_invokeI))\n (and a!33 (not a!29) (executed_0 id6 t8_invokeI))\n (and a!34 (not a!29) (executed_0 id7 t8_invokeI))\n (and a!35 (not a!36) (executed_0 id1 t8_invokeI))\n (and a!37 (not a!36) (executed_0 id2 t8_invokeI))\n (and a!38 (not a!36) (executed_0 id3 t8_invokeI))\n (and a!39 (not a!36) (executed_0 id4 t8_invokeI))\n (and a!40 (not a!36) (executed_0 id5 t8_invokeI))\n (and (not a!36) (executed_0 id6 t8_invokeI))\n (and a!41 (not a!36) (executed_0 id7 t8_invokeI)))))))\n (a!2 (or (and (not (= x!0 Id!val!0))\n (executed_0 Id!val!0 Action!val!1))\n (and (not (= x!0 Id!val!1))\n (executed_0 Id!val!1 Action!val!1))\n (and (not (= x!0 Id!val!2))\n (executed_0 Id!val!2 Action!val!1))\n (and (not (= x!0 Id!val!3))\n (executed_0 Id!val!3 Action!val!1))\n (and (not (= x!0 Id!val!4))\n (executed_0 Id!val!4 Action!val!1))\n (and (not (= x!0 Id!val!5))\n (executed_0 Id!val!5 Action!val!1))\n (and (not (= x!0 Id!val!6))\n (executed_0 Id!val!6 Action!val!1))))\n (a!3 (or (and (not (= x!0 Id!val!0))\n (executed_0 Id!val!0 Action!val!4))\n (and (not (= x!0 Id!val!1))\n (executed_0 Id!val!1 Action!val!4))\n (and (not (= x!0 Id!val!2))\n (executed_0 Id!val!2 Action!val!4))\n (and (not (= x!0 Id!val!3))\n (executed_0 Id!val!3 Action!val!4))\n (and (not (= x!0 Id!val!4))\n (executed_0 Id!val!4 Action!val!4))\n (and (not (= x!0 Id!val!5))\n (executed_0 Id!val!5 Action!val!4))\n (and (not (= x!0 Id!val!6))\n (executed_0 Id!val!6 Action!val!4))))\n (a!4 (or (= x!0 Id!val!2)\n (= x!0 Id!val!1)\n (= x!0 Id!val!0)\n (= x!0 Id!val!6))))\n (or (and (= x!1 Action!val!8)\n (or (= x!0 Id!val!1) (= x!0 Id!val!0) (= x!0 Id!val!6))\n a!1)\n (and (= x!1 Action!val!5)\n (or (= x!0 Id!val!4)\n (= x!0 Id!val!3)\n (= x!0 Id!val!0)\n (= x!0 Id!val!6))\n a!2\n a!3)\n (and (= x!1 Action!val!4) (= x!0 Id!val!5) a!2)\n (and (= x!1 Action!val!7) a!4)\n (and (= x!1 Action!val!6) a!4)\n (and (= x!1 Action!val!1)\n (or (= x!0 Id!val!3) (= x!0 Id!val!0) (= x!0 Id!val!6)))\n (and (= x!1 Action!val!0) (= x!0 Id!val!5)))))\n (define-fun executed_1 ((x!0 Id) (x!1 Action)) Bool\n false)\n (define-fun can_exec_1 ((x!0 Id) (x!1 Action)) Bool\n (let ((a!1 (exists ((?W Role))\n (let ((a!1 (>= (+ (role_level Manager)\n (* (- 1) (role_level ?W)))\n 0))\n (a!2 (or (= Manager FinAdmin)\n (= id2 id7)\n (= id2 id1)\n (and (= id2 id3) (= Manager FinClerk))\n (and (= id2 id4) (= Manager POAdmin))\n (and (= id2 id5) (= Manager POClerk))\n (and (= id2 id6) (= Manager Client))))\n (a!3 (or (= Manager FinClerk)\n (= id3 id7)\n (= id3 id1)\n (and (= id3 id2) (= Manager FinAdmin))\n (and (= id3 id4) (= Manager POAdmin))\n (and (= id3 id5) (= Manager POClerk))\n (and (= id3 id6) (= Manager Client))))\n (a!4 (or (= Manager POAdmin)\n (= id4 id7)\n (= id4 id1)\n (and (= id4 id2) (= Manager FinAdmin))\n (and (= id4 id3) (= Manager FinClerk))\n (and (= id4 id5) (= Manager POClerk))\n (and (= id4 id6) (= Manager Client))))\n (a!5 (or (= Manager POClerk)\n (= id5 id7)\n (= id5 id1)\n (and (= id5 id2) (= Manager FinAdmin))\n (and (= id5 id3) (= Manager FinClerk))\n (and (= id5 id4) (= Manager POAdmin))\n (and (= id5 id6) (= Manager Client))))\n (a!6 (or (= Manager Client)\n (= id6 id7)\n (= id6 id1)\n (and (= id6 id2) (= Manager FinAdmin))\n (and (= id6 id3) (= Manager FinClerk))\n (and (= id6 id4) (= Manager POAdmin))\n (and (= id6 id5) (= Manager POClerk))))\n (a!7 (or (= POClerk Manager)\n (= id1 id5)\n (and (= id1 id7) (= POClerk Manager))\n (and (= id1 id2) (= POClerk FinAdmin))\n (and (= id1 id3) (= POClerk FinClerk))\n (and (= id1 id4) (= POClerk POAdmin))\n (and (= id1 id6) (= POClerk Client))))\n (a!8 (>= (+ (role_level POClerk)\n (* (- 1) (role_level ?W)))\n 0))\n (a!9 (or (= POClerk FinAdmin)\n (= id2 id5)\n (and (= id2 id7) (= POClerk Manager))\n (and (= id2 id1) (= POClerk Manager))\n (and (= id2 id3) (= POClerk FinClerk))\n (and (= id2 id4) (= POClerk POAdmin))\n (and (= id2 id6) (= POClerk Client))))\n (a!10 (or (= POClerk FinClerk)\n (= id3 id5)\n (and (= id3 id7) (= POClerk Manager))\n (and (= id3 id1) (= POClerk Manager))\n (and (= id3 id2) (= POClerk FinAdmin))\n (and (= id3 id4) (= POClerk POAdmin))\n (and (= id3 id6) (= POClerk Client))))\n (a!11 (or (= POClerk POAdmin)\n (= id4 id5)\n (and (= id4 id7) (= POClerk Manager))\n (and (= id4 id1) (= POClerk Manager))\n (and (= id4 id2) (= POClerk FinAdmin))\n (and (= id4 id3) (= POClerk FinClerk))\n (and (= id4 id6) (= POClerk Client))))\n (a!12 (or (= POClerk Client)\n (= id6 id5)\n (and (= id6 id7) (= POClerk Manager))\n (and (= id6 id1) (= POClerk Manager))\n (and (= id6 id2) (= POClerk FinAdmin))\n (and (= id6 id3) (= POClerk FinClerk))\n (and (= id6 id4) (= POClerk POAdmin))))\n (a!13 (or (= POClerk Manager)\n (= id7 id5)\n (and (= id7 id1) (= POClerk Manager))\n (and (= id7 id2) (= POClerk FinAdmin))\n (and (= id7 id3) (= POClerk FinClerk))\n (and (= id7 id4) (= POClerk POAdmin))\n (and (= id7 id6) (= POClerk Client))))\n (a!14 (or (= FinClerk Manager)\n (= id1 id3)\n (and (= id1 id7) (= FinClerk Manager))\n (and (= id1 id2) (= FinClerk FinAdmin))\n (and (= id1 id4) (= FinClerk POAdmin))\n (and (= id1 id5) (= FinClerk POClerk))\n (and (= id1 id6) (= FinClerk Client))))\n (a!15 (>= (+ (role_level FinClerk)\n (* (- 1) (role_level ?W)))\n 0))\n (a!16 (or (= FinClerk FinAdmin)\n (= id2 id3)\n (and (= id2 id7) (= FinClerk Manager))\n (and (= id2 id1) (= FinClerk Manager))\n (and (= id2 id4) (= FinClerk POAdmin))\n (and (= id2 id5) (= FinClerk POClerk))\n (and (= id2 id6) (= FinClerk Client))))\n (a!17 (or (= FinClerk POAdmin)\n (= id4 id3)\n (and (= id4 id7) (= FinClerk Manager))\n (and (= id4 id1) (= FinClerk Manager))\n (and (= id4 id2) (= FinClerk FinAdmin))\n (and (= id4 id5) (= FinClerk POClerk))\n (and (= id4 id6) (= FinClerk Client))))\n (a!18 (or (= FinClerk POClerk)\n (= id5 id3)\n (and (= id5 id7) (= FinClerk Manager))\n (and (= id5 id1) (= FinClerk Manager))\n (and (= id5 id2) (= FinClerk FinAdmin))\n (and (= id5 id4) (= FinClerk POAdmin))\n (and (= id5 id6) (= FinClerk Client))))\n (a!19 (or (= FinClerk Client)\n (= id6 id3)\n (and (= id6 id7) (= FinClerk Manager))\n (and (= id6 id1) (= FinClerk Manager))\n (and (= id6 id2) (= FinClerk FinAdmin))\n (and (= id6 id4) (= FinClerk POAdmin))\n (and (= id6 id5) (= FinClerk POClerk))))\n (a!20 (or (= FinClerk Manager)\n (= id7 id3)\n (and (= id7 id1) (= FinClerk Manager))\n (and (= id7 id2) (= FinClerk FinAdmin))\n (and (= id7 id4) (= FinClerk POAdmin))\n (and (= id7 id5) (= FinClerk POClerk))\n (and (= id7 id6) (= FinClerk Client))))\n (a!21 (or (= FinAdmin Manager)\n (= id1 id2)\n (and (= id1 id7) (= FinAdmin Manager))\n (and (= id1 id3) (= FinAdmin FinClerk))\n (and (= id1 id4) (= FinAdmin POAdmin))\n (and (= id1 id5) (= FinAdmin POClerk))\n (and (= id1 id6) (= FinAdmin Client))))\n (a!22 (>= (+ (role_level FinAdmin)\n (* (- 1) (role_level ?W)))\n 0))\n (a!23 (or (= FinAdmin FinClerk)\n (= id3 id2)\n (and (= id3 id7) (= FinAdmin Manager))\n (and (= id3 id1) (= FinAdmin Manager))\n (and (= id3 id4) (= FinAdmin POAdmin))\n (and (= id3 id5) (= FinAdmin POClerk))\n (and (= id3 id6) (= FinAdmin Client))))\n (a!24 (or (= FinAdmin POAdmin)\n (= id4 id2)\n (and (= id4 id7) (= FinAdmin Manager))\n (and (= id4 id1) (= FinAdmin Manager))\n (and (= id4 id3) (= FinAdmin FinClerk))\n (and (= id4 id5) (= FinAdmin POClerk))\n (and (= id4 id6) (= FinAdmin Client))))\n (a!25 (or (= FinAdmin POClerk)\n (= id5 id2)\n (and (= id5 id7) (= FinAdmin Manager))\n (and (= id5 id1) (= FinAdmin Manager))\n (and (= id5 id3) (= FinAdmin FinClerk))\n (and (= id5 id4) (= FinAdmin POAdmin))\n (and (= id5 id6) (= FinAdmin Client))))\n (a!26 (or (= FinAdmin Client)\n (= id6 id2)\n (and (= id6 id7) (= FinAdmin Manager))\n (and (= id6 id1) (= FinAdmin Manager))\n (and (= id6 id3) (= FinAdmin FinClerk))\n (and (= id6 id4) (= FinAdmin POAdmin))\n (and (= id6 id5) (= FinAdmin POClerk))))\n (a!27 (or (= FinAdmin Manager)\n (= id7 id2)\n (and (= id7 id1) (= FinAdmin Manager))\n (and (= id7 id3) (= FinAdmin FinClerk))\n (and (= id7 id4) (= FinAdmin POAdmin))\n (and (= id7 id5) (= FinAdmin POClerk))\n (and (= id7 id6) (= FinAdmin Client))))\n (a!28 (or (= POAdmin Manager)\n (= id1 id4)\n (and (= id1 id7) (= POAdmin Manager))\n (and (= id1 id2) (= POAdmin FinAdmin))\n (and (= id1 id3) (= POAdmin FinClerk))\n (and (= id1 id5) (= POAdmin POClerk))\n (and (= id1 id6) (= POAdmin Client))))\n (a!29 (>= (+ (role_level POAdmin)\n (* (- 1) (role_level ?W)))\n 0))\n (a!30 (or (= POAdmin FinAdmin)\n (= id2 id4)\n (and (= id2 id7) (= POAdmin Manager))\n (and (= id2 id1) (= POAdmin Manager))\n (and (= id2 id3) (= POAdmin FinClerk))\n (and (= id2 id5) (= POAdmin POClerk))\n (and (= id2 id6) (= POAdmin Client))))\n (a!31 (or (= POAdmin FinClerk)\n (= id3 id4)\n (and (= id3 id7) (= POAdmin Manager))\n (and (= id3 id1) (= POAdmin Manager))\n (and (= id3 id2) (= POAdmin FinAdmin))\n (and (= id3 id5) (= POAdmin POClerk))\n (and (= id3 id6) (= POAdmin Client))))\n (a!32 (or (= POAdmin POClerk)\n (= id5 id4)\n (and (= id5 id7) (= POAdmin Manager))\n (and (= id5 id1) (= POAdmin Manager))\n (and (= id5 id2) (= POAdmin FinAdmin))\n (and (= id5 id3) (= POAdmin FinClerk))\n (and (= id5 id6) (= POAdmin Client))))\n (a!33 (or (= POAdmin Client)\n (= id6 id4)\n (and (= id6 id7) (= POAdmin Manager))\n (and (= id6 id1) (= POAdmin Manager))\n (and (= id6 id2) (= POAdmin FinAdmin))\n (and (= id6 id3) (= POAdmin FinClerk))\n (and (= id6 id5) (= POAdmin POClerk))))\n (a!34 (or (= POAdmin Manager)\n (= id7 id4)\n (and (= id7 id1) (= POAdmin Manager))\n (and (= id7 id2) (= POAdmin FinAdmin))\n (and (= id7 id3) (= POAdmin FinClerk))\n (and (= id7 id5) (= POAdmin POClerk))\n (and (= id7 id6) (= POAdmin Client))))\n (a!35 (or (= Client Manager)\n (= id1 id6)\n (and (= id1 id7) (= Client Manager))\n (and (= id1 id2) (= Client FinAdmin))\n (and (= id1 id3) (= Client FinClerk))\n (and (= id1 id4) (= Client POAdmin))\n (and (= id1 id5) (= Client POClerk))))\n (a!36 (>= (+ (role_level Client)\n (* (- 1) (role_level ?W)))\n 0))\n (a!37 (or (= Client FinAdmin)\n (= id2 id6)\n (and (= id2 id7) (= Client Manager))\n (and (= id2 id1) (= Client Manager))\n (and (= id2 id3) (= Client FinClerk))\n (and (= id2 id4) (= Client POAdmin))\n (and (= id2 id5) (= Client POClerk))))\n (a!38 (or (= Client FinClerk)\n (= id3 id6)\n (and (= id3 id7) (= Client Manager))\n (and (= id3 id1) (= Client Manager))\n (and (= id3 id2) (= Client FinAdmin))\n (and (= id3 id4) (= Client POAdmin))\n (and (= id3 id5) (= Client POClerk))))\n (a!39 (or (= Client POAdmin)\n (= id4 id6)\n (and (= id4 id7) (= Client Manager))\n (and (= id4 id1) (= Client Manager))\n (and (= id4 id2) (= Client FinAdmin))\n (and (= id4 id3) (= Client FinClerk))\n (and (= id4 id5) (= Client POClerk))))\n (a!40 (or (= Client POClerk)\n (= id5 id6)\n (and (= id5 id7) (= Client Manager))\n (and (= id5 id1) (= Client Manager))\n (and (= id5 id2) (= Client FinAdmin))\n (and (= id5 id3) (= Client FinClerk))\n (and (= id5 id4) (= Client POAdmin))))\n (a!41 (or (= Client Manager)\n (= id7 id6)\n (and (= id7 id1) (= Client Manager))\n (and (= id7 id2) (= Client FinAdmin))\n (and (= id7 id3) (= Client FinClerk))\n (and (= id7 id4) (= Client POAdmin))\n (and (= id7 id5) (= Client POClerk)))))\n (and (or (and (= x!0 id7) (= ?W Manager))\n (and (= x!0 id1) (= ?W Manager))\n (and (= x!0 id2) (= ?W FinAdmin))\n (and (= x!0 id3) (= ?W FinClerk))\n (and (= x!0 id4) (= ?W POAdmin))\n (and (= x!0 id5) (= ?W POClerk))\n (and (= x!0 id6) (= ?W Client)))\n (or (and (not a!1) (executed_1 id1 t7_invokeO))\n (and a!2 (not a!1) (executed_1 id2 t7_invokeO))\n (and a!3 (not a!1) (executed_1 id3 t7_invokeO))\n (and a!4 (not a!1) (executed_1 id4 t7_invokeO))\n (and a!5 (not a!1) (executed_1 id5 t7_invokeO))\n (and a!6 (not a!1) (executed_1 id6 t7_invokeO))\n (and (not a!1) (executed_1 id7 t7_invokeO))\n (and a!7 (not a!8) (executed_1 id1 t7_invokeO))\n (and a!9 (not a!8) (executed_1 id2 t7_invokeO))\n (and a!10 (not a!8) (executed_1 id3 t7_invokeO))\n (and a!11 (not a!8) (executed_1 id4 t7_invokeO))\n (and (not a!8) (executed_1 id5 t7_invokeO))\n (and a!12 (not a!8) (executed_1 id6 t7_invokeO))\n (and a!13 (not a!8) (executed_1 id7 t7_invokeO))\n (and a!14 (not a!15) (executed_1 id1 t7_invokeO))\n (and a!16 (not a!15) (executed_1 id2 t7_invokeO))\n (and (not a!15) (executed_1 id3 t7_invokeO))\n (and a!17 (not a!15) (executed_1 id4 t7_invokeO))\n (and a!18 (not a!15) (executed_1 id5 t7_invokeO))\n (and a!19 (not a!15) (executed_1 id6 t7_invokeO))\n (and a!20 (not a!15) (executed_1 id7 t7_invokeO))\n (and a!21 (not a!22) (executed_1 id1 t7_invokeO))\n (and (not a!22) (executed_1 id2 t7_invokeO))\n (and a!23 (not a!22) (executed_1 id3 t7_invokeO))\n (and a!24 (not a!22) (executed_1 id4 t7_invokeO))\n (and a!25 (not a!22) (executed_1 id5 t7_invokeO))\n (and a!26 (not a!22) (executed_1 id6 t7_invokeO))\n (and a!27 (not a!22) (executed_1 id7 t7_invokeO))\n (and a!28 (not a!29) (executed_1 id1 t7_invokeO))\n (and a!30 (not a!29) (executed_1 id2 t7_invokeO))\n (and a!31 (not a!29) (executed_1 id3 t7_invokeO))\n (and (not a!29) (executed_1 id4 t7_invokeO))\n (and a!32 (not a!29) (executed_1 id5 t7_invokeO))\n (and a!33 (not a!29) (executed_1 id6 t7_invokeO))\n (and a!34 (not a!29) (executed_1 id7 t7_invokeO))\n (and a!35 (not a!36) (executed_1 id1 t7_invokeO))\n (and a!37 (not a!36) (executed_1 id2 t7_invokeO))\n (and a!38 (not a!36) (executed_1 id3 t7_invokeO))\n (and a!39 (not a!36) (executed_1 id4 t7_invokeO))\n (and a!40 (not a!36) (executed_1 id5 t7_invokeO))\n (and (not a!36) (executed_1 id6 t7_invokeO))\n (and a!41 (not a!36) (executed_1 id7 t7_invokeO)))\n (or (and (not a!1) (executed_1 id1 t8_invokeI))\n (and a!2 (not a!1) (executed_1 id2 t8_invokeI))\n (and a!3 (not a!1) (executed_1 id3 t8_invokeI))\n (and a!4 (not a!1) (executed_1 id4 t8_invokeI))\n (and a!5 (not a!1) (executed_1 id5 t8_invokeI))\n (and a!6 (not a!1) (executed_1 id6 t8_invokeI))\n (and (not a!1) (executed_1 id7 t8_invokeI))\n (and a!7 (not a!8) (executed_1 id1 t8_invokeI))\n (and a!9 (not a!8) (executed_1 id2 t8_invokeI))\n (and a!10 (not a!8) (executed_1 id3 t8_invokeI))\n (and a!11 (not a!8) (executed_1 id4 t8_invokeI))\n (and (not a!8) (executed_1 id5 t8_invokeI))\n (and a!12 (not a!8) (executed_1 id6 t8_invokeI))\n (and a!13 (not a!8) (executed_1 id7 t8_invokeI))\n (and a!14 (not a!15) (executed_1 id1 t8_invokeI))\n (and a!16 (not a!15) (executed_1 id2 t8_invokeI))\n (and (not a!15) (executed_1 id3 t8_invokeI))\n (and a!17 (not a!15) (executed_1 id4 t8_invokeI))\n (and a!18 (not a!15) (executed_1 id5 t8_invokeI))\n (and a!19 (not a!15) (executed_1 id6 t8_invokeI))\n (and a!20 (not a!15) (executed_1 id7 t8_invokeI))\n (and a!21 (not a!22) (executed_1 id1 t8_invokeI))\n (and (not a!22) (executed_1 id2 t8_invokeI))\n (and a!23 (not a!22) (executed_1 id3 t8_invokeI))\n (and a!24 (not a!22) (executed_1 id4 t8_invokeI))\n (and a!25 (not a!22) (executed_1 id5 t8_invokeI))\n (and a!26 (not a!22) (executed_1 id6 t8_invokeI))\n (and a!27 (not a!22) (executed_1 id7 t8_invokeI))\n (and a!28 (not a!29) (executed_1 id1 t8_invokeI))\n (and a!30 (not a!29) (executed_1 id2 t8_invokeI))\n (and a!31 (not a!29) (executed_1 id3 t8_invokeI))\n (and (not a!29) (executed_1 id4 t8_invokeI))\n (and a!32 (not a!29) (executed_1 id5 t8_invokeI))\n (and a!33 (not a!29) (executed_1 id6 t8_invokeI))\n (and a!34 (not a!29) (executed_1 id7 t8_invokeI))\n (and a!35 (not a!36) (executed_1 id1 t8_invokeI))\n (and a!37 (not a!36) (executed_1 id2 t8_invokeI))\n (and a!38 (not a!36) (executed_1 id3 t8_invokeI))\n (and a!39 (not a!36) (executed_1 id4 t8_invokeI))\n (and a!40 (not a!36) (executed_1 id5 t8_invokeI))\n (and (not a!36) (executed_1 id6 t8_invokeI))\n (and a!41 (not a!36) (executed_1 id7 t8_invokeI)))))))\n (a!2 (or (= x!0 Id!val!2)\n (= x!0 Id!val!1)\n (= x!0 Id!val!0)\n (= x!0 Id!val!6)))\n (a!3 (or (and (not (= x!0 Id!val!0))\n (executed_1 Id!val!0 Action!val!1))\n (and (not (= x!0 Id!val!1))\n (executed_1 Id!val!1 Action!val!1))\n (and (not (= x!0 Id!val!2))\n (executed_1 Id!val!2 Action!val!1))\n (and (not (= x!0 Id!val!3))\n (executed_1 Id!val!3 Action!val!1))\n (and (not (= x!0 Id!val!4))\n (executed_1 Id!val!4 Action!val!1))\n (and (not (= x!0 Id!val!5))\n (executed_1 Id!val!5 Action!val!1))\n (and (not (= x!0 Id!val!6))\n (executed_1 Id!val!6 Action!val!1))))\n (a!4 (or (and (not (= x!0 Id!val!0))\n (executed_1 Id!val!0 Action!val!4))\n (and (not (= x!0 Id!val!1))\n (executed_1 Id!val!1 Action!val!4))\n (and (not (= x!0 Id!val!2))\n (executed_1 Id!val!2 Action!val!4))\n (and (not (= x!0 Id!val!3))\n (executed_1 Id!val!3 Action!val!4))\n (and (not (= x!0 Id!val!4))\n (executed_1 Id!val!4 Action!val!4))\n (and (not (= x!0 Id!val!5))\n (executed_1 Id!val!5 Action!val!4))\n (and (not (= x!0 Id!val!6))\n (executed_1 Id!val!6 Action!val!4)))))\n (or (and (= x!1 Action!val!8)\n (or (= x!0 Id!val!1) (= x!0 Id!val!0) (= x!0 Id!val!6))\n a!1)\n (and (= x!1 Action!val!7) a!2)\n (and (= x!1 Action!val!6) a!2)\n (and (= x!1 Action!val!1)\n (or (= x!0 Id!val!3) (= x!0 Id!val!0) (= x!0 Id!val!6)))\n (and (= x!1 Action!val!0) (= x!0 Id!val!5))\n (and (= x!1 Action!val!5)\n (or (= x!0 Id!val!4)\n (= x!0 Id!val!3)\n (= x!0 Id!val!0)\n (= x!0 Id!val!6))\n a!3\n a!4)\n (and (= x!1 Action!val!4) (= x!0 Id!val!5) a!3))))\n (define-fun role_le ((x!0 Role) (x!1 Role)) Bool\n (let ((a!1 (>= (+ (role_level x!0) (* (- 1) (role_level x!1))) 0)))\n (not a!1)))\n (define-fun role_permission_assign ((x!0 Role) (x!1 Permission)) Bool\n (or (and (= x!0 Role!val!0)\n (or (= x!1 Permission!val!4)\n (= x!1 Permission!val!0)\n (= x!1 Permission!val!3)\n (= x!1 Permission!val!2)))\n (and (= x!0 Role!val!1)\n (or (= x!1 Permission!val!3) (= x!1 Permission!val!4)))\n (and (= x!0 Role!val!5)\n (or (= x!1 Permission!val!1) (= x!1 Permission!val!5)))\n (and (= x!0 Role!val!3)\n (or (= x!1 Permission!val!0) (= x!1 Permission!val!2)))\n (and (= x!0 Role!val!2) (= x!1 Permission!val!3))\n (and (= x!0 Role!val!4) (= x!1 Permission!val!2))))\n (define-fun user ((x!0 Id)) Bool\n false)\n (define-fun t3_split_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t2_invoke_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t5_invoke_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t4_join_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t7_invokeO_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t9_invoke_0_1 ((x!0 Id)) Bool\n false)\n (define-fun t8_invokeI_0_1 ((x!0 Id)) Bool\n false)\n (define-fun role ((x!0 Role)) Bool\n false)\n (define-fun t6_invoke_0_1 ((x!0 Id)) Bool\n false)\n)\n",error:"",status:"z3-ran",hash:"af6a70cefc3dba8098cbe4a89af3b722698976d0"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"It is very effective in this benchmark since it contains many quantifiers of the form"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"forall x. p(x) = ....")),(0,i.kt)("p",null,"The Z3 model finder is more effective if the input formula does not contain nested quantifiers. If that is not the case for your formula, you can use the option"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"(set-option :smt.pull-nested-quantifiers true)")),(0,i.kt)("p",null,"The following challenge problem from the paper ",(0,i.kt)("a",{parentName:"p",href:"https://www.ijcai.org/Proceedings/95-1/Papers/039.pdf"},"SEM a system for enumerating models")," is proved to be unsatisfiable in less than one second by Z3."),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(declare-sort S)\n(declare-fun g (S S) S)\n(declare-fun f (S S) S)\n(declare-const a S)\n(declare-const b S)\n\n(assert (forall ((x S) (y S))\n (= (g (f x y) (f x x)) x)))\n(assert (forall ((x S) (y S))\n (= (f (g x y) (g x x)) x)))\n(assert (forall ((x S) (y S) (z S))\n (= (g (g x y) z) (g (g y z) x))))\n(assert (forall ((x S) (y S) (z S))\n (= (f (f x y) z) (f (f y z) x))))\n(assert (distinct (g a (f b a)) (f a (g b a))))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"413a91abce2055a09d7b92f30fc44306ed6ab8bf"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Quantifier reasoning is undecidable. Z3 attempts to find a refutation or a finite model\nof quantified formulas. When formulas are satisfiable but have no finite models, z3 will\nlikely diverge. The following example illustrates a formula that only has infinite models.")),(0,i.kt)(d(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.mbqi true)\n(declare-sort S)\n(declare-fun g (S) S)\n(declare-fun f (S) S)\n(declare-const a S)\n(assert (forall ((x S)) (= (g (f x)) x)))\n(assert (forall ((x S)) (not (= a (f x)))))\n(check-sat)\n(get-model)",result:{output:"",error:"",status:"z3-ran",hash:"f2ec0485fd2506523e58a8b628c9647616e5484d"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}x.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/10abeab5.25fbdbb1.js b/assets/js/10abeab5.25fbdbb1.js deleted file mode 100644 index 4b8705a97..000000000 --- a/assets/js/10abeab5.25fbdbb1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4905],{5918:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>n,metadata:()=>a,toc:()=>l});var i=s(7462),o=(s(7294),s(3905));s(7634);const n={title:"Introduction",sidebar_position:1},r=void 0,a={unversionedId:"strategies/intro",id:"strategies/intro",title:"Introduction",description:"High-performance solvers, such as Z3, contain many tightly integrated, handcrafted heuristic combinations of algorithmic proof methods. While these heuristic combinations tend to be highly tuned for known classes of problems, they may easily perform very badly on new classes of problems. This issue is becoming increasingly pressing as solvers begin to gain the attention of practitioners in diverse areas of science and engineering. In many cases, changes to the solver heuristics can make a tremendous difference.",source:"@site/docs-smtlib/03 - strategies/01 - intro.md",sourceDirName:"03 - strategies",slug:"/strategies/intro",permalink:"/z3guide/docs/strategies/intro",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/03 - strategies/01 - intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1},sidebar:"smtlibSidebar",previous:{title:"Special Relations",permalink:"/z3guide/docs/theories/Special Relations"},next:{title:"Goals",permalink:"/z3guide/docs/strategies/goals"}},c={},l=[],d={toc:l};function h(e){let{components:t,...s}=e;return(0,o.kt)("wrapper",(0,i.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"High-performance solvers, such as Z3, contain many tightly integrated, handcrafted heuristic combinations of algorithmic proof methods. While these heuristic combinations tend to be highly tuned for known classes of problems, they may easily perform very badly on new classes of problems. This issue is becoming increasingly pressing as solvers begin to gain the attention of practitioners in diverse areas of science and engineering. In many cases, changes to the solver heuristics can make a tremendous difference."),(0,o.kt)("p",null,"In this tutorial we show how to create custom strategies using the basic building blocks available in Z3. Z3 implements the ideas proposed in this ",(0,o.kt)("a",{parentName:"p",href:"https://web.archive.org/web/20190206110824/http://research.microsoft.com/en-us/um/people/leonardo/strategy.pdf"},"article"),"."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/10abeab5.d5221aff.js b/assets/js/10abeab5.d5221aff.js new file mode 100644 index 000000000..685cc9f08 --- /dev/null +++ b/assets/js/10abeab5.d5221aff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4905],{5918:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>n,metadata:()=>a,toc:()=>l});var i=s(7462),o=(s(7294),s(3905));s(7634);const n={title:"Introduction",sidebar_position:1},r=void 0,a={unversionedId:"strategies/intro",id:"strategies/intro",title:"Introduction",description:"High-performance solvers, such as Z3, contain many tightly integrated, handcrafted heuristic combinations of algorithmic proof methods. While these heuristic combinations tend to be highly tuned for known classes of problems, they may easily perform very badly on new classes of problems. This issue is becoming increasingly pressing as solvers gain the attention of practitioners in diverse areas of science and engineering. In many cases, changes to the solver heuristics can make a tremendous difference.",source:"@site/docs-smtlib/03 - strategies/01 - intro.md",sourceDirName:"03 - strategies",slug:"/strategies/intro",permalink:"/z3guide/docs/strategies/intro",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/03 - strategies/01 - intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1},sidebar:"smtlibSidebar",previous:{title:"Special Relations",permalink:"/z3guide/docs/theories/Special Relations"},next:{title:"Goals",permalink:"/z3guide/docs/strategies/goals"}},c={},l=[],d={toc:l};function h(e){let{components:t,...s}=e;return(0,o.kt)("wrapper",(0,i.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"High-performance solvers, such as Z3, contain many tightly integrated, handcrafted heuristic combinations of algorithmic proof methods. While these heuristic combinations tend to be highly tuned for known classes of problems, they may easily perform very badly on new classes of problems. This issue is becoming increasingly pressing as solvers gain the attention of practitioners in diverse areas of science and engineering. In many cases, changes to the solver heuristics can make a tremendous difference."),(0,o.kt)("p",null,"In this tutorial we show how to create custom strategies using the basic building blocks available in Z3. Z3 implements the ideas proposed in this ",(0,o.kt)("a",{parentName:"p",href:"https://web.archive.org/web/20190206110824/http://research.microsoft.com/en-us/um/people/leonardo/strategy.pdf"},"article"),"."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2e0965f8.1643131f.js b/assets/js/2e0965f8.1643131f.js new file mode 100644 index 000000000..52e0d7d4b --- /dev/null +++ b/assets/js/2e0965f8.1643131f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1934],{5184:(i,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>m});var e=o(7462),s=(o(7294),o(3905));o(7634);const r={title:"Introduction",sidebar_position:1},n=void 0,a={unversionedId:"optimization/intro",id:"optimization/intro",title:"Introduction",description:"Z3's main functionality is checking the satisfiability of logical formulas over one or more theories. Z3 can also produce models for satisfiable formulas.",source:"@site/docs-smtlib/04 - optimization/01 - intro.md",sourceDirName:"04 - optimization",slug:"/optimization/intro",permalink:"/z3guide/docs/optimization/intro",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/01 - intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1},sidebar:"smtlibSidebar",previous:{title:"Simplifiers Summary",permalink:"/z3guide/docs/strategies/simplifiers-summary"},next:{title:"Optimization from the API",permalink:"/z3guide/docs/optimization/apioptimization"}},l={},m=[],c={toc:m};function p(i){let{components:t,...o}=i;return(0,s.kt)("wrapper",(0,e.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"Z3's main functionality is checking the satisfiability of logical formulas over one or more theories. Z3 can also produce models for satisfiable formulas.\nHowever, arbitrary models are insufficient in many cases where applications are really solving optimization problems:\none or more values should be minimal or maximal. When there are multiple objectives, they should be combined using Pareto fronts, lexicographic priorities, or optimized independently."),(0,s.kt)("p",null,"This section describes a feature exposed by Z3 that lets users formulate objective functions directly with Z3. Under the hood is a portfolio of approaches for solving linear optimization problems over SMT formulas, MaxSMT, and their combinations."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2e0965f8.f23d9e8c.js b/assets/js/2e0965f8.f23d9e8c.js deleted file mode 100644 index e2928b0fd..000000000 --- a/assets/js/2e0965f8.f23d9e8c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1934],{5184:(i,e,o)=>{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>n,toc:()=>m});var t=o(7462),r=(o(7294),o(3905));o(7634);const s={title:"Introduction",sidebar_position:1},a=void 0,n={unversionedId:"optimization/intro",id:"optimization/intro",title:"Introduction",description:"Z3's main functionality to checking the satisfiability of logical formulas over one or more theories. Z3 can produce models for satisfiable formulas. Yet in many cases arbitrary models are insufficient and applications are really solving optimization problems: one or more values should be minimal or maximal. When there are multiple objectives, they should be combined using Pareto fronts, lexicographic priorities, or optimized independently. This section describes a feature exposed by Z3 that lets users formulate objective functions directly with Z3. Under the hood is a portfolio of approaches for solving linear optimization problems over SMT formulas, MaxSMT, and their combinations.",source:"@site/docs-smtlib/04 - optimization/01 - intro.md",sourceDirName:"04 - optimization",slug:"/optimization/intro",permalink:"/z3guide/docs/optimization/intro",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/01 - intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1},sidebar:"smtlibSidebar",previous:{title:"Simplifiers Summary",permalink:"/z3guide/docs/strategies/simplifiers-summary"},next:{title:"Optimization from the API",permalink:"/z3guide/docs/optimization/apioptimization"}},l={},m=[],c={toc:m};function p(i){let{components:e,...o}=i;return(0,r.kt)("wrapper",(0,t.Z)({},c,o,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Z3's main functionality to checking the satisfiability of logical formulas over one or more theories. Z3 can produce models for satisfiable formulas. Yet in many cases arbitrary models are insufficient and applications are really solving optimization problems: one or more values should be minimal or maximal. When there are multiple objectives, they should be combined using Pareto fronts, lexicographic priorities, or optimized independently. This section describes a feature exposed by Z3 that lets users formulate objective functions directly with Z3. Under the hood is a portfolio of approaches for solving linear optimization problems over SMT formulas, MaxSMT, and their combinations."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/54fd2156.2f24fcd6.js b/assets/js/54fd2156.2f24fcd6.js new file mode 100644 index 000000000..956ca8586 --- /dev/null +++ b/assets/js/54fd2156.2f24fcd6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5053],{3697:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>n,metadata:()=>s,toc:()=>c});var i=o(7462),r=(o(7294),o(3905));o(7634);const n={title:"Introduction",sidebar_position:1},a=void 0,s={unversionedId:"logic/intro",id:"logic/intro",title:"Introduction",description:"Z3 is a state-of-the art theorem prover from Microsoft Research. It can be used to check the satisfiability of logical formulas over one or more theories. Z3 offers a compelling match for software analysis and verification tools, since several common software constructs map directly into supported theories.",source:"@site/docs-smtlib/01 - logic/01 - intro.md",sourceDirName:"01 - logic",slug:"/logic/intro",permalink:"/z3guide/docs/logic/intro",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/01 - intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1},sidebar:"smtlibSidebar",next:{title:"Basic Commands",permalink:"/z3guide/docs/logic/basiccommands"}},l={},c=[{value:"SMTLIB Format",id:"smtlib-format",level:2}],d={toc:c};function m(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,i.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Z3 is a state-of-the art theorem prover from Microsoft Research. It can be used to check the satisfiability of logical formulas over one or more theories. Z3 offers a compelling match for software analysis and verification tools, since several common software constructs map directly into supported theories."),(0,r.kt)("p",null,"The main objective of the tutorial is to introduce the reader on how to use Z3 effectively for logical modeling and solving. The tutorial provides some general background on logical modeling, but we defer a full introduction to first-order logic and decision procedures to text-books, if you want to develop an in-depth understanding of the underlying concepts. To clarify: a deep understanding of logical modeling is not required to understand this tutorial and modeling with Z3, but it is necessary for writing complex models."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("blockquote",{parentName:"admonition"},(0,r.kt)("p",{parentName:"blockquote"},"For an understanding of computational logic from the foundations of first-order logic to state-of-the-art decision procedures for arithmetic, data structures, and combination theories, refer to ",(0,r.kt)("a",{parentName:"p",href:"https://theory.stanford.edu/~arbrad/book.html"},"The Calculus of Computation by Aaron Bradley and Zohar Manna"))),(0,r.kt)("blockquote",{parentName:"admonition"},(0,r.kt)("p",{parentName:"blockquote"},"For an understanding of decision procedures, algorithms that, given a decision problem, terminate with a correct yes or no answer, refer to ",(0,r.kt)("a",{parentName:"p",href:"http://www.decision-procedures.org/"},"Decision Procedures by Daniel Kroening and Ofer Strichman"))),(0,r.kt)("blockquote",{parentName:"admonition"},(0,r.kt)("p",{parentName:"blockquote"},"For an overview of Satisfiability modulo theories (SMT) and Boolean satisfiability problem (SAT) solvers, examples of their theoretical application, and questions to work through, refer to ",(0,r.kt)("a",{parentName:"p",href:"https://sat-smt.codes/SAT_SMT_by_example.pdf"},"SAT/SMT by Example by Dennis Yurichev")," "))),(0,r.kt)("p",null,"Z3 is a low-level tool. It is best used as a component in the context of other tools that require solving logical formulas. Consequently, Z3 exposes a number of API facilities to make it convenient for tools to map into Z3, but there are no stand-alone editors or user-centric facilities for interacting with Z3. The language syntax used in the front ends favor simplicity in contrast to linguistic convenience."),(0,r.kt)("h2",{id:"smtlib-format"},"SMTLIB Format"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This tutorial uses Z3's frontend for the ",(0,r.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/"},"SMTLIB format"),".")),(0,r.kt)("p",null,"The SMTLIB format is a community standard used by several SMT solvers.\nIt uses LISP-like syntax to make it easy for tools to serialize and de-serialize models.\nOn the flip-side, it is not optimized for human readability.\nThe SMTLIB initiative defines several theories, and Z3 supports all main theories in the SMTLIB2 format.\nThis tutorial cross-references the definitions of theories in relevant sections."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"}," Be sure to follow along with the examples by clicking the edit link in the corner. See what the tool says, try your own formulas, and experiment!")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/54fd2156.76551afc.js b/assets/js/54fd2156.76551afc.js deleted file mode 100644 index 56900a544..000000000 --- a/assets/js/54fd2156.76551afc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5053],{3697:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>n,metadata:()=>s,toc:()=>c});var i=o(7462),r=(o(7294),o(3905));o(7634);const n={title:"Introduction",sidebar_position:1},a=void 0,s={unversionedId:"logic/intro",id:"logic/intro",title:"Introduction",description:"Z3 is a state-of-the art theorem prover from Microsoft Research. It can be used to check the satisfiability of logical formulas over one or more theories. Z3 offers a compelling match for software analysis and verification tools, since several common software constructs map directly into supported theories.",source:"@site/docs-smtlib/01 - logic/01 - intro.md",sourceDirName:"01 - logic",slug:"/logic/intro",permalink:"/z3guide/docs/logic/intro",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/01 - intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1},sidebar:"smtlibSidebar",next:{title:"Basic Commands",permalink:"/z3guide/docs/logic/basiccommands"}},l={},c=[{value:"SMTLIB Format",id:"smtlib-format",level:2}],d={toc:c};function m(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,i.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Z3 is a state-of-the art theorem prover from Microsoft Research. It can be used to check the satisfiability of logical formulas over one or more theories. Z3 offers a compelling match for software analysis and verification tools, since several common software constructs map directly into supported theories."),(0,r.kt)("p",null,"The main objective of the tutorial is to introduce the reader on how to use Z3 effectively for logical modeling and solving. The tutorial provides some general background on logical modeling, but we have to defer a full introduction to first-order logic and decision procedures to text-books in order to develop an in depth understanding of the underlying concepts. To clarify: a deep understanding of logical modeling is not necessarily required to understand this tutorial and modeling with Z3, but it is necessary to understand for writing complex models."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("blockquote",{parentName:"admonition"},(0,r.kt)("p",{parentName:"blockquote"},"For an understanding of computational logic from the foundations of first-order logic to state-of-the-art decision procedures for arithmetic, data structures, and combination theories, refer to ",(0,r.kt)("a",{parentName:"p",href:"https://theory.stanford.edu/~arbrad/book.html"},"The Calculus of Computation by Aaron Bradley and Zohar Manna"))),(0,r.kt)("blockquote",{parentName:"admonition"},(0,r.kt)("p",{parentName:"blockquote"},"For an understanding of decision procedures, algorithms that, given a decision problem, terminate with a correct yes or no answer, refer to ",(0,r.kt)("a",{parentName:"p",href:"http://www.decision-procedures.org/"},"Decision Procedures by Daniel Kroening and Ofer Strichman"))),(0,r.kt)("blockquote",{parentName:"admonition"},(0,r.kt)("p",{parentName:"blockquote"},"For an overview of Satisfiability modulo theories (SMT) and Boolean satisfiability problem (SAT) solvers, examples of their theoretical application, and questions to work through, refer to ",(0,r.kt)("a",{parentName:"p",href:"https://sat-smt.codes/SAT_SMT_by_example.pdf"},"SAT/SMT by Example by Dennis Yurichev")," "))),(0,r.kt)("p",null,"Z3 is a low level tool. It is best used as a component in the context of other tools that require solving logical formulas. Consequently, Z3 exposes a number of API facilities to make it convenient for tools to map into Z3, but there are no stand-alone editors or user-centric facilities for interacting with Z3. The language syntax used in the front ends favor simplicity in contrast to linguistic convenience."),(0,r.kt)("h2",{id:"smtlib-format"},"SMTLIB Format"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"This tutorial uses Z3's frontend for the ",(0,r.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/"},"SMTLIB format"),".")),(0,r.kt)("p",null,"The format is a community standard used by several SMT solvers.\nIt uses LISP like syntax to make it easy for tools to serialize and de-serialize models.\nOn the flip-side it is not optimized for human readability.\nThe SMTLIB initiative defines several theories and z3 supports all main theories in the SMTLIB2 format.\nThis tutorial cross-references the definitions of theories in relevant sections."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"}," Be sure to follow along with the examples by clicking the edit link in the corner. See what the tool says, try your own formulas, and experiment!")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5ddc85b0.466f7181.js b/assets/js/5ddc85b0.466f7181.js new file mode 100644 index 000000000..e22604e84 --- /dev/null +++ b/assets/js/5ddc85b0.466f7181.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2219],{3146:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>u,toc:()=>d});var o=n(7462),r=(n(7294),n(3905)),s=n(7634),i=n.n(s);const a={title:"Z3 JavaScript",sidebar_position:1},l=void 0,u={unversionedId:"Z3 JavaScript Examples",id:"Z3 JavaScript Examples",title:"Z3 JavaScript",description:"The Z3 distribution comes with TypeScript (and therefore JavaScript) bindings for Z3.",source:"@site/docs-programming/01 - Z3 JavaScript Examples.md",sourceDirName:".",slug:"/Z3 JavaScript Examples",permalink:"/z3guide/programming/Z3 JavaScript Examples",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-programming/01 - Z3 JavaScript Examples.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Z3 JavaScript",sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Introduction",permalink:"/z3guide/programming/Z3 Python - Readonly/Introduction"}},c={},d=[{value:"Warmup",id:"warmup",level:2},{value:"Propositional Logic",id:"propositional-logic",level:2},{value:"Integer Arithmetic",id:"integer-arithmetic",level:2},{value:"Dogs, cats and mice",id:"dogs-cats-and-mice",level:3},{value:"Arrays",id:"arrays",level:2},{value:"Prove Store(arr, idx, val)[idx] == val",id:"prove-storearr-idx-validx--val",level:3},{value:"Find unequal arrays with the same sum",id:"find-unequal-arrays-with-the-same-sum",level:3},{value:"Uninterpreted Functions",id:"uninterpreted-functions",level:2},{value:"Prove x = y implies g(x) = g(y)",id:"prove-x--y-implies-gx--gy",level:3},{value:"Disprove x = y implies g(g(x)) = g(y)",id:"disprove-x--y-implies-ggx--gy",level:3},{value:"Prove x = y implies g(x) = g(y)",id:"prove-x--y-implies-gx--gy-1",level:3},{value:"Disprove that x = y implies g(g(x)) = g(y)",id:"disprove-that-x--y-implies-ggx--gy",level:3},{value:"Solve sudoku",id:"solve-sudoku",level:2},{value:"Arithmetic over Reals",id:"arithmetic-over-reals",level:2},{value:"Non-linear arithmetic",id:"non-linear-arithmetic",level:2},{value:"Bit-vectors",id:"bit-vectors",level:2},{value:"Using Z3 objects wrapped in JavaScript",id:"using-z3-objects-wrapped-in-javascript",level:2}],m={toc:d};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The Z3 distribution comes with TypeScript (and therefore JavaScript) bindings for Z3.\nIn the following we give a few examples of using Z3 through these bindings.\nYou can run and modify the examples locally in your browser."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The bindings do not support all features of z3. For example, you cannot (yet) create array expressions in the same way\nthat you can create arithmetic expressions. The JavaScript bindings have the distinct advantage that they let you use\nz3 directly in your browser with minimal extra dependencies.")),(0,r.kt)("h2",{id:"warmup"},"Warmup"),(0,r.kt)("p",null,"We use a collection of basic examples to illustrate the bindings.\nThe first example is a formula that establishes that there is no number both above 9 and below 10:"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const x = Z3.Int.const('x');\nZ3.solve(Z3.And(x.ge(10), x.le(9)));",result:{output:"unsat",error:"",status:"z3-ran",hash:"e922f5d67ccc35fa400733c16b4d61d69ff6b632"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"We note that the JavaScript bindings wrap z3 expressions into JavaScript options that support methods for building new expressions.\nFor example, the method ",(0,r.kt)("inlineCode",{parentName:"p"},"ge")," is available on an arithmetic expression ",(0,r.kt)("inlineCode",{parentName:"p"},"a"),". It takes one argument ",(0,r.kt)("inlineCode",{parentName:"p"},"b")," and returns\nand expression corresponding to the predicate ",(0,r.kt)("inlineCode",{parentName:"p"},"a >= b"),".\nThe ",(0,r.kt)("inlineCode",{parentName:"p"},"Z3.solve")," method takes a sequence of predicates and checks if there is a solution. If there is a solution, it returns a model."),(0,r.kt)("h2",{id:"propositional-logic"},"Propositional Logic"),(0,r.kt)("p",null,"Prove De Morgan's Law"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const [x, y] = [Z3.Bool.const('x'), Z3.Bool.const('y')];\nconst conjecture = Z3.Eq(Z3.Not(Z3.And(x, y)), Z3.Or(Z3.Not(x), Z3.Not(y)));\nZ3.solve(Z3.Not(conjecture))",result:{output:"unsat",error:"",status:"z3-ran",hash:"3a53592ec250bf8df687cf80a0f11d91a6188010"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"What not to wear? It is well-known that developers of SAT solvers have difficulties looking sharp.\nThey like to wear some combination of shirt and tie, but can't wear both. What should a SAT solver developer wear?"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const [tie, shirt] = [Z3.Bool.const('tie'), Z3.Bool.const('shirt')];\nZ3.solve(Z3.Or(tie, shirt), Z3.Implies(tie, shirt), Z3.Or(Z3.Not(tie), Z3.Not(shirt)))",result:{output:"(define-fun tie () Bool\n false)\n(define-fun shirt () Bool\n true)",error:"",status:"z3-ran",hash:"379785d6d66506d6effe05402a8893e8b7523434"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"integer-arithmetic"},"Integer Arithmetic"),(0,r.kt)("p",null,"solve ",(0,r.kt)("inlineCode",{parentName:"p"},"x > 2 and y < 10 and x + 2y = 7")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nZ3.solve(x.gt(2), y.lt(10), x.add(y.mul(2)).eq(7))",result:{output:"(define-fun y () Int\n 0)\n(define-fun x () Int\n 7)",error:"",status:"z3-ran",hash:"42a7a63176ffc902488fa8ff1cced016fa464d48"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"dogs-cats-and-mice"},"Dogs, cats and mice"),(0,r.kt)("p",null,"Given 100 dollars, the puzzle asks if it is possible to buy 100 animals\nbased on their prices that are 15, 1, and 0.25 dollars, respectively."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"\n// Create 3 integer variables\n\nconst dog = Z3.Int.const('dog')\nconst cat = Z3.Int.const('cat')\nconst mouse = Z3.Int.const('mouse')\n\nZ3.solve(\n// there is at least one dog, one cat, and one mouse\n dog.ge(1), cat.ge(1), mouse.ge(1),\n \n// we want to buy 100 animals\n dog.add(cat.add(mouse)).eq(100),\n \n// We have 100 dollars (10000 cents):\n// dogs cost 15 dollars (1500 cents),\n// cats cost 1 dollar (100 cents), and\n// mice cost 25 cents\n(dog.mul(1500)).add(cat.mul(100)).add(mouse.mul(25)).eq(10000));\n",result:{output:"(define-fun mouse () Int\n 56)\n(define-fun cat () Int\n 41)\n(define-fun dog () Int\n 3)",error:"",status:"z3-ran",hash:"2421970460fbaa30fc0b9e08764b8eb2e3d8e654"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"arrays"},"Arrays"),(0,r.kt)("p",null,"Arrays use the methods ",(0,r.kt)("inlineCode",{parentName:"p"},"select")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"store")," to access and update elements. Note that\narrays are static and these operations return new arrays."),(0,r.kt)("h3",{id:"prove-storearr-idx-validx--val"},"Prove ",(0,r.kt)("inlineCode",{parentName:"h3"},"Store(arr, idx, val)[idx] == val")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const arr = Z3.Array.const('arr', Z3.Int.sort(), Z3.Int.sort());\nconst [idx, val] = Z3.Int.consts('idx val');\nconst conjecture = arr.store(idx, val).select(idx).eq(val);\nZ3.solve(Z3.Not(conjecture));",result:{output:"unsat",error:"",status:"z3-ran",hash:"ea869f66fee020cc99b67e22a69f4eb167d886a0"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"find-unequal-arrays-with-the-same-sum"},"Find unequal arrays with the same sum"),(0,r.kt)("p",null,"We illustrate how to use the solver in finding assignments of array values that\nsatisfy a given predicate. In this example, we want to find two arrays of length 4\nthat have the same sum, but are not equal:"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'const { Array, BitVec } = Z3;\nconst mod = 1n << 32n;\nconst arr1 = Array.const(\'arr\', BitVec.sort(2), BitVec.sort(32));\nconst arr2 = Array.const(\'arr2\', BitVec.sort(2), BitVec.sort(32));\nconst same_sum = arr1.select(0)\n .add(arr1.select(1))\n .add(arr1.select(2))\n .add(arr1.select(3))\n .eq(\n arr2.select(0)\n .add(arr2.select(1))\n .add(arr2.select(2))\n .add(arr2.select(3))\n );\nconst different = arr1.select(0).neq(arr2.select(0))\n .or(arr1.select(1).neq(arr2.select(1)))\n .or(arr1.select(2).neq(arr2.select(2)))\n .or(arr1.select(3).neq(arr2.select(3)));\n \nconst model = await Z3.solve(same_sum.and(different)) as Model;\nconst arr1Vals = [0, 1, 2, 3].map(i => model.eval(arr1.select(i)).value());\nconst arr2Vals = [0, 1, 2, 3].map(i => model.eval(arr2.select(i)).value());\n\nvar buffer = ""\nfor (let i = 0; i < 4; i++) {\n buffer += arr1Vals[i];\n buffer += " "\n}\nbuffer += "\\n";\nfor (let i = 0; i < 4; i++) {\n buffer += arr2Vals[i];\n buffer += " "\n}\nbuffer += "\\n";\nbuffer',result:{output:"2147597802 2147499600 2147483688 2227176291 \n2172649509 2155872591 2147483700 2193751581 \n",error:"",status:"z3-ran",hash:"f6793a607076c47bfc29eaeef881b1dcda8ba727"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"uninterpreted-functions"},"Uninterpreted Functions"),(0,r.kt)("p",null,"The method ",(0,r.kt)("inlineCode",{parentName:"p"},"call")," is used to build expressions by applying the function node to arguments."),(0,r.kt)("h3",{id:"prove-x--y-implies-gx--gy"},"Prove ",(0,r.kt)("inlineCode",{parentName:"h3"},"x = y implies g(x) = g(y)")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const sort = Z3.Int.sort();\nconst x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nconst g = Z3.Function.declare('g', sort, sort);\nconst conjecture = Z3.Implies(x.eq(y), g.call(x).eq(g.call(y)));\nZ3.solve(Z3.Not(conjecture));",result:{output:"unsat",error:"",status:"z3-ran",hash:"0416f801105445fd080b9c12e4eb7dbdaf5bf203"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"disprove-x--y-implies-ggx--gy"},"Disprove ",(0,r.kt)("inlineCode",{parentName:"h3"},"x = y implies g(g(x)) = g(y)")),(0,r.kt)("p",null,"we illustrate the use of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Solver")," object in the following example. Instead of calling ",(0,r.kt)("inlineCode",{parentName:"p"},"Z3.solve"),"\nwe here create a solver object and add assertions to it. The ",(0,r.kt)("inlineCode",{parentName:"p"},"solver.check()")," method is used to check\nsatisfiability (we expect the result to be ",(0,r.kt)("inlineCode",{parentName:"p"},"sat")," for this example). The method ",(0,r.kt)("inlineCode",{parentName:"p"},"solver.model()")," is used to retrieve a model:"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const solver = new Z3.Solver();\nconst sort = Z3.Int.sort();\nconst x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nconst g = Z3.Function.declare('g', sort, sort);\nconst conjecture = Z3.Implies(x.eq(y), g.call(g.call(x)).eq(g.call(y)));\nsolver.add(Z3.Not(conjecture));\nawait solver.check()\nsolver.model()",result:{output:"(define-fun y () Int\n 0)\n(define-fun x () Int\n 0)\n(define-fun g ((x!0 Int)) Int\n (ite (= x!0 1) 2\n 1))",error:"",status:"z3-ran",hash:"5eb81fc2305ac6e94405d0edc5b795203f888907"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"prove-x--y-implies-gx--gy-1"},"Prove ",(0,r.kt)("inlineCode",{parentName:"h3"},"x = y implies g(x) = g(y)")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const sort = Z3.Int.sort();\nconst x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nconst g = Z3.Function.declare('g', sort, sort);\nconst conjecture = Z3.Implies(x.eq(y), g.call(x).eq(g.call(y)));\nZ3.solve(Z3.Not(conjecture));",result:{output:"unsat",error:"",status:"z3-ran",hash:"0416f801105445fd080b9c12e4eb7dbdaf5bf203"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"disprove-that-x--y-implies-ggx--gy"},"Disprove that ",(0,r.kt)("inlineCode",{parentName:"h3"},"x = y implies g(g(x)) = g(y)")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const sort = Z3.Int.sort();\nconst x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nconst g = Z3.Function.declare('g', sort, sort);\nconst conjecture = Z3.Implies(x.eq(y), g.call(g.call(x)).eq(g.call(y)));\nZ3.solve(Z3.Not(conjecture));",result:{output:"(define-fun y () Int\n 0)\n(define-fun x () Int\n 0)\n(define-fun g ((x!0 Int)) Int\n (ite (= x!0 1) 2\n 1))",error:"",status:"z3-ran",hash:"e55b30653ca15e40c2eb854bcd7f83e552fb28b1"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"solve-sudoku"},"Solve sudoku"),(0,r.kt)("p",null,"The popular Sudoku can be solved. "),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"function toSudoku(data: string): (number | null)[][] {\n const cells: (number | null)[][] = Array.from({ length: 9 }, () => Array.from({ length: 9 }, () => null));\n\n const lines = data.trim().split('\\n');\n for (let row = 0; row < 9; row++) {\n const line = lines[row].trim();\n for (let col = 0; col < 9; col++) {\n const char = line[col];\n if (char !== '.') {\n cells[row][col] = Number.parseInt(char);\n }\n }\n }\n return cells;\n}\n\nconst INSTANCE = toSudoku(`\n....94.3.\n...51...7\n.89....4.\n......2.8\n.6.2.1.5.\n1.2......\n.7....52.\n9...65...\n.4.97....\n`);\n\n\nconst cells = [];\n// 9x9 matrix of integer variables\nfor (let i = 0; i < 9; i++) {\n const row = [];\n for (let j = 0; j < 9; j++) {\n row.push(Z3.Int.const(`x_${i}_${j}`));\n }\n cells.push(row);\n}\n\nconst solver = new Z3.Solver();\n\n// each cell contains a value 1<=x<=9\nfor (let i = 0; i < 9; i++) {\n for (let j = 0; j < 9; j++) {\n solver.add(cells[i][j].ge(1), cells[i][j].le(9));\n }\n}\n\n// each row contains a digit only once\nfor (let i = 0; i < 9; i++) {\n solver.add(Z3.Distinct(...cells[i]));\n}\n\n// each column contains a digit only once\nfor (let j = 0; j < 9; j++) {\n const column = [];\n for (let i = 0; i < 9; i++) {\n column.push(cells[i][j]);\n }\n solver.add(Z3.Distinct(...column));\n}\n\n// each 3x3 contains a digit at most once\nfor (let iSquare = 0; iSquare < 3; iSquare++) {\n for (let jSquare = 0; jSquare < 3; jSquare++) {\n const square = [];\n\n for (let i = iSquare * 3; i < iSquare * 3 + 3; i++) {\n for (let j = jSquare * 3; j < jSquare * 3 + 3; j++) {\n square.push(cells[i][j]);\n }\n }\n\n solver.add(Z3.Distinct(...square));\n }\n}\n\nfor (let i = 0; i < 9; i++) {\n for (let j = 0; j < 9; j++) {\n const digit = INSTANCE[i][j];\n if (digit !== null) {\n solver.add(cells[i][j].eq(digit));\n }\n }\n}\n\nconst is_sat = await solver.check(); // sat\nconst model = solver.model() as Model;\nvar buffer = \"\";\n\nfor (let i = 0; i < 9; i++) {\n for (let j = 0; j < 9; j++) {\n const v = model.eval(cells[i][j]);\n buffer += `${v}`;\n }\n buffer += \"\\n\";\n}\nbuffer",result:{output:"715894632\n234516897\n689723145\n493657218\n867231954\n152489763\n376148529\n928365471\n541972386\n",error:"",status:"z3-ran",hash:"24c49cd87f0675250373f49d976cdd15a6e7b99d"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"The encoding used in the following example uses arithmetic.\nIt works here, but is not the only possible encoding approach.\nYou can also use bit-vectors for the cells. It is generally better\nto use bit-vectors for finite domain problems in z3."),(0,r.kt)("h2",{id:"arithmetic-over-reals"},"Arithmetic over Reals"),(0,r.kt)("p",null,"You can create constants ranging over reals from strings that use fractions, decimal notation and from floating point numbers."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const n1 = Z3.Real.val('1/2');\nconst n2 = Z3.Real.val('0.5');\nconst n3 = Z3.Real.val(0.5);\n\nconst conjecture = Z3.And(n1.eq(n2), n1.eq(n3));\nZ3.solve(Z3.Not(conjecture));",result:{output:"unsat",error:"",status:"z3-ran",hash:"90ec1216eab499316c07276b612bcd61615caa97"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"Z3 uses arbitrary precision arithmetic, so decimal positions are not truncated when you use strings to represent real numerals."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const n4 = Z3.Real.val('-1/3');\nconst n5 = Z3.Real.val('-0.3333333333333333333333333333333333');\n\nZ3.solve(n4.eq(n5));",result:{output:"unsat",error:"",status:"z3-ran",hash:"ae47da1938d92eebfcaa388fb2e0988945eac156"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"non-linear-arithmetic"},"Non-linear arithmetic"),(0,r.kt)("p",null,"Z3 uses a decision procedure for non-linear arithmetic over reals.\nIt is based on Cylindric Algebraic Decomposition. Solutions to non-linear\narithmetic formulas are no longer necessarily rational. They are represented\nas ",(0,r.kt)("em",{parentName:"p"},"algebraic numbers")," in general and can be displayed with any number of\ndecimal position precision."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"setParam('pp.decimal', true);\nsetParam('pp.decimal_precision', 80);\n\nconst x = Z3.Real.const('x');\nconst y = Z3.Real.const('y');\nconst z = Z3.Real.const('z');\n\nconst solver = new Z3.Solver();\nsolver.add(x.mul(x).add(y.mul(y)).eq(1)); // x^2 + y^2 == 1\nsolver.add(x.mul(x).mul(x).add(z.mul(z).mul(z)).lt('1/2')); // x^3 + z^3 < 1/2\n\nawait solver.check(); // sat\nsolver.model()",result:{output:"(define-fun y () Real\n (- 0.99215674164922147143810590761472265964134719365591881763812542220040080871135636?))\n(define-fun x () Real\n 0.125)\n(define-fun z () Real\n 0.0)",error:"",status:"z3-ran",hash:"459b18f23c03a3d3ccb742bb6166f8866b26cfb0"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"bit-vectors"},"Bit-vectors"),(0,r.kt)("p",null,"Unlike in programming languages, there is no distinction between\nsigned and unsigned bit-vectors. Instead the API supports operations\nthat have different meaning depending on whether a bit-vector is treated\nas a signed or unsigned numeral. These are signed comparison and signed division, remainder operations."),(0,r.kt)("p",null,"In the following we illustrate the use of signed and unsigned less-than-or-equal:"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const x = Z3.BitVec.const('x', 32);\n\nconst sConj = x.sub(10).sle(0).eq(x.sle(10));\nconst sSolver = new Z3.Solver();\nsSolver.add(sConj);\nawait sSolver.check(); // sat\n\nconst sModel = sSolver.model();\n\n\nconst uConj = x.sub(10).ule(0).eq(x.ule(10));\nconst uSolver = new Z3.Solver();\nuSolver.add(uConj);\nawait uSolver.check(); // sat\n\nconst uModel = uSolver.model();\n[uModel.get(x), sModel.get(x)] // unsigned, signed",result:{output:"#x0000000a,#x0000001b",error:"",status:"z3-ran",hash:"23c9e15fa22cb254094961ed652fa069d4597fd3"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"It is easy to write formulas that mix bit-wise and arithmetic operations over bit-vectors."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const x = Z3.BitVec.const('x', 32);\nconst y = Z3.BitVec.const('y', 32);\n\nconst solver = new Z3.Solver();\nconst conjecture = x.xor(y).sub(103).eq(x.mul(y));\nsolver.add(conjecture);\nconst is_sat = await solver.check(); // sat\n\nconst model = solver.model();\n\n// need the following cast for `asSignedValue` to work\nconst xSol = model.get(x) as BitVecNum;\nconst ySol = model.get(y) as BitVecNum;\n\n\nconst are_vals = Z3.isBitVecVal(xSol) && Z3.isBitVecVal(ySol); // true\n\nconst xv = xSol.asSignedValue();\nconst yv = ySol.asSignedValue();\n\n// this solutions wraps around so we need to check using modulo\nconst is_eq = (xv ^ yv) - 103n === (xv * yv) % 2n ** 32n; // true\n\n` is-sat: ${is_sat} solutions are values: ${are_vals} satisfy equality: ${is_eq}`",result:{output:" is-sat: sat solutions are values: true satisfy equality: true",error:"",status:"z3-ran",hash:"8ff59998e114f4ec19fcad9b0d029e9835175804"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"using-z3-objects-wrapped-in-javascript"},"Using Z3 objects wrapped in JavaScript"),(0,r.kt)("p",null,"The following example illustrates the use of AstVector:"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const solver = new Z3.Solver();\n\nconst vector = new Z3.AstVector();\nfor (let i = 0; i < 5; i++) {\n vector.push(Z3.Int.const(`int__${i}`));\n}\n\nconst length = vector.length();\nfor (let i = 0; i < length; i++) {\n solver.add((vector.get(i) as Arith).gt(1));\n}\nsolver.add(Z3.Distinct(...vector));\nawait solver.check();\nsolver.model()",result:{output:"(define-fun int__2 () Int\n 4)\n(define-fun int__3 () Int\n 5)\n(define-fun int__0 () Int\n 2)\n(define-fun int__1 () Int\n 3)\n(define-fun int__4 () Int\n 6)",error:"",status:"z3-ran",hash:"d65bb11ada82ace58d5648422b8bcf0480d0e090"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5ddc85b0.f2edfcb8.js b/assets/js/5ddc85b0.f2edfcb8.js deleted file mode 100644 index 1c61e3720..000000000 --- a/assets/js/5ddc85b0.f2edfcb8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2219],{3146:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>u,toc:()=>d});var o=n(7462),r=(n(7294),n(3905)),s=n(7634),i=n.n(s);const a={title:"Z3 JavaScript",sidebar_position:1},l=void 0,u={unversionedId:"Z3 JavaScript Examples",id:"Z3 JavaScript Examples",title:"Z3 JavaScript",description:"The Z3 distribution comes with TypeScript (and therefore JavaScript) bindings for Z3.",source:"@site/docs-programming/01 - Z3 JavaScript Examples.md",sourceDirName:".",slug:"/Z3 JavaScript Examples",permalink:"/z3guide/programming/Z3 JavaScript Examples",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-programming/01 - Z3 JavaScript Examples.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Z3 JavaScript",sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Introduction",permalink:"/z3guide/programming/Z3 Python - Readonly/Introduction"}},c={},d=[{value:"Warmup",id:"warmup",level:2},{value:"Propositional Logic",id:"propositional-logic",level:2},{value:"Integer Arithmetic",id:"integer-arithmetic",level:2},{value:"Dogs, cats and mice",id:"dogs-cats-and-mice",level:3},{value:"Arrays",id:"arrays",level:2},{value:"Prove Store(arr, idx, val)[idx] == val",id:"prove-storearr-idx-validx--val",level:3},{value:"Find unequal arrays with the same sum",id:"find-unequal-arrays-with-the-same-sum",level:3},{value:"Uninterpreted Functions",id:"uninterpreted-functions",level:2},{value:"Prove x = y implies g(x) = g(y)",id:"prove-x--y-implies-gx--gy",level:3},{value:"Disprove x = y implies g(g(x)) = g(y)",id:"disprove-x--y-implies-ggx--gy",level:3},{value:"Prove x = y implies g(x) = g(y)",id:"prove-x--y-implies-gx--gy-1",level:3},{value:"Disprove that x = y implies g(g(x)) = g(y)",id:"disprove-that-x--y-implies-ggx--gy",level:3},{value:"Solve sudoku",id:"solve-sudoku",level:2},{value:"Arithmetic over Reals",id:"arithmetic-over-reals",level:2},{value:"Non-linear arithmetic",id:"non-linear-arithmetic",level:2},{value:"Bit-vectors",id:"bit-vectors",level:2},{value:"Using Z3 objects wrapped in JavaScript",id:"using-z3-objects-wrapped-in-javascript",level:2}],m={toc:d};function p(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The Z3 distribution comes with TypeScript (and therefore JavaScript) bindings for Z3.\nIn the following we give a few examples of using Z3 through these bindings.\nYou can run and modify the examples locally in your browser."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The bindings do not support all features of z3. For example, you cannot (yet) create array expressions in the same way\nthat you can create arithmetic expressions. The JavaScript bindings have the distinct advantage that they allow to use\nz3 directly in your browser with minimal extra dependencies.")),(0,r.kt)("h2",{id:"warmup"},"Warmup"),(0,r.kt)("p",null,"We use a collection of basic examples to illustrate the bindings.\nThe first example is a formula that establishes that there is no number both above 9 and below 10:"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const x = Z3.Int.const('x');\nZ3.solve(Z3.And(x.ge(10), x.le(9)));",result:{output:"unsat",error:"",status:"z3-ran",hash:"e922f5d67ccc35fa400733c16b4d61d69ff6b632"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"We note that the JavaScript bindings wrap z3 expressions into JavaScript options that support methods for building new expressions.\nFor example, the method ",(0,r.kt)("inlineCode",{parentName:"p"},"ge")," is available on an arithmetic expression ",(0,r.kt)("inlineCode",{parentName:"p"},"a"),". It takes one argument ",(0,r.kt)("inlineCode",{parentName:"p"},"b")," and returns\nand expression corresponding to the predicate ",(0,r.kt)("inlineCode",{parentName:"p"},"a >= b"),".\nThe ",(0,r.kt)("inlineCode",{parentName:"p"},"Z3.solve")," method takes a sequence of predicates and checks if there is a solution. If there is a solution, it returns a model."),(0,r.kt)("h2",{id:"propositional-logic"},"Propositional Logic"),(0,r.kt)("p",null,"Prove De Morgan's Law"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const [x, y] = [Z3.Bool.const('x'), Z3.Bool.const('y')];\nconst conjecture = Z3.Eq(Z3.Not(Z3.And(x, y)), Z3.Or(Z3.Not(x), Z3.Not(y)));\nZ3.solve(Z3.Not(conjecture))",result:{output:"unsat",error:"",status:"z3-ran",hash:"3a53592ec250bf8df687cf80a0f11d91a6188010"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"What not to wear? It is well-known that developers of SAT solvers have difficulties looking sharp.\nThey like to wear some combination of shirt and tie, but can't wear both. What should a SAT solver developer wear?"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const [tie, shirt] = [Z3.Bool.const('tie'), Z3.Bool.const('shirt')];\nZ3.solve(Z3.Or(tie, shirt), Z3.Implies(tie, shirt), Z3.Or(Z3.Not(tie), Z3.Not(shirt)))",result:{output:"(define-fun tie () Bool\n false)\n(define-fun shirt () Bool\n true)",error:"",status:"z3-ran",hash:"379785d6d66506d6effe05402a8893e8b7523434"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"integer-arithmetic"},"Integer Arithmetic"),(0,r.kt)("p",null,"solve ",(0,r.kt)("inlineCode",{parentName:"p"},"x > 2 and y < 10 and x + 2y = 7")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nZ3.solve(x.gt(2), y.lt(10), x.add(y.mul(2)).eq(7))",result:{output:"(define-fun y () Int\n 0)\n(define-fun x () Int\n 7)",error:"",status:"z3-ran",hash:"42a7a63176ffc902488fa8ff1cced016fa464d48"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"dogs-cats-and-mice"},"Dogs, cats and mice"),(0,r.kt)("p",null,"Given 100 dollars, the puzzle asks if it is possible to buy 100 animals\nbased on their prices that are 15, 1, and 0.25 dollars, respectively."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"\n// Create 3 integer variables\n\nconst dog = Z3.Int.const('dog')\nconst cat = Z3.Int.const('cat')\nconst mouse = Z3.Int.const('mouse')\n\nZ3.solve(\n// there is at least one dog, one cat, and one mouse\n dog.ge(1), cat.ge(1), mouse.ge(1),\n \n// we want to buy 100 animals\n dog.add(cat.add(mouse)).eq(100),\n \n// We have 100 dollars (10000 cents):\n// dogs cost 15 dollars (1500 cents),\n// cats cost 1 dollar (100 cents), and\n// mice cost 25 cents\n(dog.mul(1500)).add(cat.mul(100)).add(mouse.mul(25)).eq(10000));\n",result:{output:"(define-fun mouse () Int\n 56)\n(define-fun cat () Int\n 41)\n(define-fun dog () Int\n 3)",error:"",status:"z3-ran",hash:"2421970460fbaa30fc0b9e08764b8eb2e3d8e654"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"arrays"},"Arrays"),(0,r.kt)("p",null,"Arrays use the methods ",(0,r.kt)("inlineCode",{parentName:"p"},"select")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"store")," to access and update elements. Note that\narrays are static and these operations return new arrays."),(0,r.kt)("h3",{id:"prove-storearr-idx-validx--val"},"Prove ",(0,r.kt)("inlineCode",{parentName:"h3"},"Store(arr, idx, val)[idx] == val")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const arr = Z3.Array.const('arr', Z3.Int.sort(), Z3.Int.sort());\nconst [idx, val] = Z3.Int.consts('idx val');\nconst conjecture = arr.store(idx, val).select(idx).eq(val);\nZ3.solve(Z3.Not(conjecture));",result:{output:"unsat",error:"",status:"z3-ran",hash:"ea869f66fee020cc99b67e22a69f4eb167d886a0"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"find-unequal-arrays-with-the-same-sum"},"Find unequal arrays with the same sum"),(0,r.kt)("p",null,"We illustrate how to use the solver in finding assignments of array values that\nsatisfy a given predicate. In this example, we want to find two arrays of length 4\nthat have the same sum, but are not equal."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'const { Array, BitVec } = Z3;\nconst mod = 1n << 32n;\nconst arr1 = Array.const(\'arr\', BitVec.sort(2), BitVec.sort(32));\nconst arr2 = Array.const(\'arr2\', BitVec.sort(2), BitVec.sort(32));\nconst same_sum = arr1.select(0)\n .add(arr1.select(1))\n .add(arr1.select(2))\n .add(arr1.select(3))\n .eq(\n arr2.select(0)\n .add(arr2.select(1))\n .add(arr2.select(2))\n .add(arr2.select(3))\n );\nconst different = arr1.select(0).neq(arr2.select(0))\n .or(arr1.select(1).neq(arr2.select(1)))\n .or(arr1.select(2).neq(arr2.select(2)))\n .or(arr1.select(3).neq(arr2.select(3)));\n \nconst model = await Z3.solve(same_sum.and(different)) as Model;\nconst arr1Vals = [0, 1, 2, 3].map(i => model.eval(arr1.select(i)).value());\nconst arr2Vals = [0, 1, 2, 3].map(i => model.eval(arr2.select(i)).value());\n\nvar buffer = ""\nfor (let i = 0; i < 4; i++) {\n buffer += arr1Vals[i];\n buffer += " "\n}\nbuffer += "\\n";\nfor (let i = 0; i < 4; i++) {\n buffer += arr2Vals[i];\n buffer += " "\n}\nbuffer += "\\n";\nbuffer',result:{output:"2147597802 2147499600 2147483688 2227176291 \n2172649509 2155872591 2147483700 2193751581 \n",error:"",status:"z3-ran",hash:"f6793a607076c47bfc29eaeef881b1dcda8ba727"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"uninterpreted-functions"},"Uninterpreted Functions"),(0,r.kt)("p",null,"The method ",(0,r.kt)("inlineCode",{parentName:"p"},"call")," is used to build expressions by applying the function node to arguments."),(0,r.kt)("h3",{id:"prove-x--y-implies-gx--gy"},"Prove ",(0,r.kt)("inlineCode",{parentName:"h3"},"x = y implies g(x) = g(y)")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const sort = Z3.Int.sort();\nconst x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nconst g = Z3.Function.declare('g', sort, sort);\nconst conjecture = Z3.Implies(x.eq(y), g.call(x).eq(g.call(y)));\nZ3.solve(Z3.Not(conjecture));",result:{output:"unsat",error:"",status:"z3-ran",hash:"0416f801105445fd080b9c12e4eb7dbdaf5bf203"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"disprove-x--y-implies-ggx--gy"},"Disprove ",(0,r.kt)("inlineCode",{parentName:"h3"},"x = y implies g(g(x)) = g(y)")),(0,r.kt)("p",null,"we illustrate the use of the ",(0,r.kt)("inlineCode",{parentName:"p"},"Solver")," object in the following example. Instead of calling ",(0,r.kt)("inlineCode",{parentName:"p"},"Z3.solve"),"\nwe here create a solver object and add assertions to it. The ",(0,r.kt)("inlineCode",{parentName:"p"},"solver.check()")," method is used to check\nsatisfiability (we expect the result to be ",(0,r.kt)("inlineCode",{parentName:"p"},"sat")," for this example). The method ",(0,r.kt)("inlineCode",{parentName:"p"},"solver.model()")," is used to retrieve a model."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const solver = new Z3.Solver();\nconst sort = Z3.Int.sort();\nconst x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nconst g = Z3.Function.declare('g', sort, sort);\nconst conjecture = Z3.Implies(x.eq(y), g.call(g.call(x)).eq(g.call(y)));\nsolver.add(Z3.Not(conjecture));\nawait solver.check()\nsolver.model()",result:{output:"(define-fun y () Int\n 0)\n(define-fun x () Int\n 0)\n(define-fun g ((x!0 Int)) Int\n (ite (= x!0 1) 2\n 1))",error:"",status:"z3-ran",hash:"5eb81fc2305ac6e94405d0edc5b795203f888907"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"prove-x--y-implies-gx--gy-1"},"Prove ",(0,r.kt)("inlineCode",{parentName:"h3"},"x = y implies g(x) = g(y)")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const sort = Z3.Int.sort();\nconst x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nconst g = Z3.Function.declare('g', sort, sort);\nconst conjecture = Z3.Implies(x.eq(y), g.call(x).eq(g.call(y)));\nZ3.solve(Z3.Not(conjecture));",result:{output:"unsat",error:"",status:"z3-ran",hash:"0416f801105445fd080b9c12e4eb7dbdaf5bf203"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h3",{id:"disprove-that-x--y-implies-ggx--gy"},"Disprove that ",(0,r.kt)("inlineCode",{parentName:"h3"},"x = y implies g(g(x)) = g(y)")),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const sort = Z3.Int.sort();\nconst x = Z3.Int.const('x');\nconst y = Z3.Int.const('y');\nconst g = Z3.Function.declare('g', sort, sort);\nconst conjecture = Z3.Implies(x.eq(y), g.call(g.call(x)).eq(g.call(y)));\nZ3.solve(Z3.Not(conjecture));",result:{output:"(define-fun y () Int\n 0)\n(define-fun x () Int\n 0)\n(define-fun g ((x!0 Int)) Int\n (ite (= x!0 1) 2\n 1))",error:"",status:"z3-ran",hash:"e55b30653ca15e40c2eb854bcd7f83e552fb28b1"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"solve-sudoku"},"Solve sudoku"),(0,r.kt)("p",null,"The popular Sudoko can be solved. "),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"function toSudoku(data: string): (number | null)[][] {\n const cells: (number | null)[][] = Array.from({ length: 9 }, () => Array.from({ length: 9 }, () => null));\n\n const lines = data.trim().split('\\n');\n for (let row = 0; row < 9; row++) {\n const line = lines[row].trim();\n for (let col = 0; col < 9; col++) {\n const char = line[col];\n if (char !== '.') {\n cells[row][col] = Number.parseInt(char);\n }\n }\n }\n return cells;\n}\n\nconst INSTANCE = toSudoku(`\n....94.3.\n...51...7\n.89....4.\n......2.8\n.6.2.1.5.\n1.2......\n.7....52.\n9...65...\n.4.97....\n`);\n\n\nconst cells = [];\n// 9x9 matrix of integer variables\nfor (let i = 0; i < 9; i++) {\n const row = [];\n for (let j = 0; j < 9; j++) {\n row.push(Z3.Int.const(`x_${i}_${j}`));\n }\n cells.push(row);\n}\n\nconst solver = new Z3.Solver();\n\n// each cell contains a value 1<=x<=9\nfor (let i = 0; i < 9; i++) {\n for (let j = 0; j < 9; j++) {\n solver.add(cells[i][j].ge(1), cells[i][j].le(9));\n }\n}\n\n// each row contains a digit only once\nfor (let i = 0; i < 9; i++) {\n solver.add(Z3.Distinct(...cells[i]));\n}\n\n// each column contains a digit only once\nfor (let j = 0; j < 9; j++) {\n const column = [];\n for (let i = 0; i < 9; i++) {\n column.push(cells[i][j]);\n }\n solver.add(Z3.Distinct(...column));\n}\n\n// each 3x3 contains a digit at most once\nfor (let iSquare = 0; iSquare < 3; iSquare++) {\n for (let jSquare = 0; jSquare < 3; jSquare++) {\n const square = [];\n\n for (let i = iSquare * 3; i < iSquare * 3 + 3; i++) {\n for (let j = jSquare * 3; j < jSquare * 3 + 3; j++) {\n square.push(cells[i][j]);\n }\n }\n\n solver.add(Z3.Distinct(...square));\n }\n}\n\nfor (let i = 0; i < 9; i++) {\n for (let j = 0; j < 9; j++) {\n const digit = INSTANCE[i][j];\n if (digit !== null) {\n solver.add(cells[i][j].eq(digit));\n }\n }\n}\n\nconst is_sat = await solver.check(); // sat\nconst model = solver.model() as Model;\nvar buffer = \"\";\n\nfor (let i = 0; i < 9; i++) {\n for (let j = 0; j < 9; j++) {\n const v = model.eval(cells[i][j]);\n buffer += `${v}`;\n }\n buffer += \"\\n\";\n}\nbuffer",result:{output:"715894632\n234516897\n689723145\n493657218\n867231954\n152489763\n376148529\n928365471\n541972386\n",error:"",status:"z3-ran",hash:"24c49cd87f0675250373f49d976cdd15a6e7b99d"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"The encoding used in the following example uses arithmetic.\nIt works here, but is not the only possible encoding approach.\nYou can also use bit-vectors for the cells. It is generally better\nto use bit-vectors for finite domain problems in z3."),(0,r.kt)("h2",{id:"arithmetic-over-reals"},"Arithmetic over Reals"),(0,r.kt)("p",null,"You can create constants ranging over reals from strings that use fractions, decimal notation and from floating point numbers."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const n1 = Z3.Real.val('1/2');\nconst n2 = Z3.Real.val('0.5');\nconst n3 = Z3.Real.val(0.5);\n\nconst conjecture = Z3.And(n1.eq(n2), n1.eq(n3));\nZ3.solve(Z3.Not(conjecture));",result:{output:"unsat",error:"",status:"z3-ran",hash:"90ec1216eab499316c07276b612bcd61615caa97"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"Z3 uses arbitrary precision arithmetic, so decimal positions are not truncated when you use strings to represent real numerals."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const n4 = Z3.Real.val('-1/3');\nconst n5 = Z3.Real.val('-0.3333333333333333333333333333333333');\n\nZ3.solve(n4.eq(n5));",result:{output:"unsat",error:"",status:"z3-ran",hash:"ae47da1938d92eebfcaa388fb2e0988945eac156"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"non-linear-arithmetic"},"Non-linear arithmetic"),(0,r.kt)("p",null,"Z3 uses a decision procedure for non-linear arithmetic over reals.\nIt is based on Cylindric Algebraic Decomposition. Solutions to non-linear\narithmetic formulas are no longer necessarily rational. They are represented\nas ",(0,r.kt)("em",{parentName:"p"},"algebraic numbers")," in general and can be displayed with any number of\ndecimal position precision."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"setParam('pp.decimal', true);\nsetParam('pp.decimal_precision', 80);\n\nconst x = Z3.Real.const('x');\nconst y = Z3.Real.const('y');\nconst z = Z3.Real.const('z');\n\nconst solver = new Z3.Solver();\nsolver.add(x.mul(x).add(y.mul(y)).eq(1)); // x^2 + y^2 == 1\nsolver.add(x.mul(x).mul(x).add(z.mul(z).mul(z)).lt('1/2')); // x^3 + z^3 < 1/2\n\nawait solver.check(); // sat\nsolver.model()",result:{output:"(define-fun y () Real\n (- 0.99215674164922147143810590761472265964134719365591881763812542220040080871135636?))\n(define-fun x () Real\n 0.125)\n(define-fun z () Real\n 0.0)",error:"",status:"z3-ran",hash:"459b18f23c03a3d3ccb742bb6166f8866b26cfb0"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"bit-vectors"},"Bit-vectors"),(0,r.kt)("p",null,"Unlike in programming languages, there is no distinction between\nsigned and unsigned bit-vectors. Instead the API supports operations\nthat have different meaning depending on whether a bit-vector is treated\nas a signed or unsigned numeral. These are signed comparison and signed division, remainder operations."),(0,r.kt)("p",null,"In the following we illustrate the use of signed and unsigned less-than-or-equal."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const x = Z3.BitVec.const('x', 32);\n\nconst sConj = x.sub(10).sle(0).eq(x.sle(10));\nconst sSolver = new Z3.Solver();\nsSolver.add(sConj);\nawait sSolver.check(); // sat\n\nconst sModel = sSolver.model();\n\n\nconst uConj = x.sub(10).ule(0).eq(x.ule(10));\nconst uSolver = new Z3.Solver();\nuSolver.add(uConj);\nawait uSolver.check(); // sat\n\nconst uModel = uSolver.model();\n[uModel.get(x), sModel.get(x)] // unsigned, signed",result:{output:"#x0000000a,#x0000001b",error:"",status:"z3-ran",hash:"23c9e15fa22cb254094961ed652fa069d4597fd3"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("p",null,"It is easy to write formulas that mix bit-wise and arithmetic operations over bit-vectors."),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const x = Z3.BitVec.const('x', 32);\nconst y = Z3.BitVec.const('y', 32);\n\nconst solver = new Z3.Solver();\nconst conjecture = x.xor(y).sub(103).eq(x.mul(y));\nsolver.add(conjecture);\nconst is_sat = await solver.check(); // sat\n\nconst model = solver.model();\n\n// need the following cast for `asSignedValue` to work\nconst xSol = model.get(x) as BitVecNum;\nconst ySol = model.get(y) as BitVecNum;\n\n\nconst are_vals = Z3.isBitVecVal(xSol) && Z3.isBitVecVal(ySol); // true\n\nconst xv = xSol.asSignedValue();\nconst yv = ySol.asSignedValue();\n\n// this solutions wraps around so we need to check using modulo\nconst is_eq = (xv ^ yv) - 103n === (xv * yv) % 2n ** 32n; // true\n\n` is-sat: ${is_sat} solutions are values: ${are_vals} satisfy equality: ${is_eq}`",result:{output:" is-sat: sat solutions are values: true satisfy equality: true",error:"",status:"z3-ran",hash:"8ff59998e114f4ec19fcad9b0d029e9835175804"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,r.kt)("h2",{id:"using-z3-objects-wrapped-in-javascript"},"Using Z3 objects wrapped in JavaScript"),(0,r.kt)("p",null,"The following example illustrates the use of AstVector"),(0,r.kt)(i(),{input:{lang:"z3-js",highlight:"typescript",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"const solver = new Z3.Solver();\n\nconst vector = new Z3.AstVector();\nfor (let i = 0; i < 5; i++) {\n vector.push(Z3.Int.const(`int__${i}`));\n}\n\nconst length = vector.length();\nfor (let i = 0; i < length; i++) {\n solver.add((vector.get(i) as Arith).gt(1));\n}\nsolver.add(Z3.Distinct(...vector));\nawait solver.check();\nsolver.model()",result:{output:"(define-fun int__2 () Int\n 4)\n(define-fun int__3 () Int\n 5)\n(define-fun int__0 () Int\n 2)\n(define-fun int__1 () Int\n 3)\n(define-fun int__4 () Int\n 6)",error:"",status:"z3-ran",hash:"d65bb11ada82ace58d5648422b8bcf0480d0e090"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/700268b1.d746bf85.js b/assets/js/700268b1.2d7d5957.js similarity index 99% rename from assets/js/700268b1.d746bf85.js rename to assets/js/700268b1.2d7d5957.js index 50349296a..ec951e26f 100644 --- a/assets/js/700268b1.d746bf85.js +++ b/assets/js/700268b1.2d7d5957.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7560],{2364:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>u,toc:()=>f});var a=n(7462),i=(n(7294),n(3905)),o=n(7634),l=n.n(o);const r={title:"Tactics",sidebar_position:3},s=void 0,u={unversionedId:"strategies/tactics",id:"strategies/tactics",title:"Tactics",description:"Z3 comes equipped with many built-in tactics. The command (help-tactic) provides a short description of all built-in tactics.",source:"@site/docs-smtlib/03 - strategies/03 - tactics.md",sourceDirName:"03 - strategies",slug:"/strategies/tactics",permalink:"/z3guide/docs/strategies/tactics",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/03 - strategies/03 - tactics.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Tactics",sidebar_position:3},sidebar:"smtlibSidebar",previous:{title:"Goals",permalink:"/z3guide/docs/strategies/goals"},next:{title:"Probes",permalink:"/z3guide/docs/strategies/probes"}},d={},f=[],c={toc:f};function m(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Z3 comes equipped with many built-in tactics. The command (help-tactic) provides a short description of all built-in tactics."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(help-tactic)",result:{output:"\"combinators:\n- (and-then +) executes the given tactics sequentially.\n- (or-else +) tries the given tactics in sequence until one of them succeeds (i.e., the first that doesn't fail).\n- (par-or +) executes the given tactics in parallel until one of them succeeds (i.e., the first that doesn't fail).\n- (par-then ) executes tactic1 and then tactic2 to every subgoal produced by tactic1. All subgoals are processed in parallel.\n- (try-for ) executes the given tactic for at most milliseconds, it fails if the execution takes more than milliseconds.\n- (if ) if evaluates to true, then execute the first tactic. Otherwise execute the second.\n- (when ) shorthand for (if skip).\n- (fail-if ) fail if evaluates to true.\n- (using-params *) executes the given tactic using the given attributes, where ::= . ! is a syntax sugar for using-params.\nbuiltin tactics:\n- ackermannize_bv A tactic for performing full Ackermannization on bv instances.\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n- subpaving tactic for testing subpaving module.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n epsilon (unsigned int) (default: 20) value k s.t. a new lower (upper) bound for x is propagated only new-lower(x) > lower(k) + 1/k * max(min(upper(x) - lower(x), |lower|), 1) (new-upper(x) < upper(x) - 1/k * max(min(upper(x) - lower(x), |lower|), 1)). If k = 0, then this restriction is ignored.\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_bound (unsigned int) (default 10) value k s.t. a new upper (lower) bound for x is propagated only if upper(x) > -10^k or lower(x) = -oo (lower(x) < 10^k or upper(x) = oo)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) (default: 128) maximum depth of the subpaving tree.\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_nodes (unsigned int) (default: 8192) maximum number of nodes in the subpaving tree.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nth_root_precision (unsigned int) (default 8192) value k s.t. 1/k is the precision for computing the nth root in the subpaving module.\n numeral (symbol) (default: mpq) options: mpq, mpf, hwf, mpff, mpfx.\n print_nodes (bool) (default: false) display subpaving tree leaves.\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- horn apply tactic for horn clauses.\n bmc.linear_unrolling_depth (unsigned int) Maximal level to explore (default: 4294967295)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n datalog.all_or_nothing_deltas (bool) compile rules so that it is enough for the delta relation in union and widening operations to determine only whether the updated relation was modified or not (default: false)\n datalog.check_relation (symbol) name of default relation to check. operations on the default relation will be verified using SMT solving (default: null)\n datalog.compile_with_widening (bool) widening will be used to compile recursive rules (default: false)\n datalog.dbg_fpr_nonempty_relation_signature (bool) if true, finite_product_relation will attempt to avoid creating inner relation with empty signature by putting in half of the table columns, if it would have been empty otherwise (default: false)\n datalog.default_relation (symbol) default relation implementation: external_relation, pentagon (default: pentagon)\n datalog.default_table (symbol) default table implementation: sparse, hashtable, bitvector, interval (default: sparse)\n datalog.default_table_checked (bool) if true, the default table will be default_table inside a wrapper that checks that its results are the same as of default_table_checker table (default: false)\n datalog.default_table_checker (symbol) see default_table_checked (default: null)\n datalog.explanations_on_relation_level (bool) if true, explanations are generated as history of each relation, rather than per fact (generate_explanations must be set to true for this option to have any effect) (default: false)\n datalog.generate_explanations (bool) produce explanations for produced facts when using the datalog engine (default: false)\n datalog.initial_restart_timeout (unsigned int) length of saturation run before the first restart (in ms), zero means no restarts (default: 0)\n datalog.magic_sets_for_queries (bool) magic set transformation will be used for queries (default: false)\n datalog.output_profile (bool) determines whether profile information should be output when outputting Datalog rules or instructions (default: false)\n datalog.print.tuples (bool) determines whether tuples for output predicates should be output (default: true)\n datalog.profile_timeout_milliseconds (unsigned int) instructions and rules that took less than the threshold will not be printed when printed the instruction/rule list (default: 0)\n datalog.similarity_compressor (bool) rules that differ only in values of constants will be merged into a single rule (default: true)\n datalog.similarity_compressor_threshold (unsigned int) if similarity_compressor is on, this value determines how many similar rules there must be in order for them to be merged (default: 11)\n datalog.subsumption (bool) if true, removes/filters predicates with total transitions (default: true)\n datalog.timeout (unsigned int) Time limit used for saturation (default: 0)\n datalog.unbound_compressor (bool) auxiliary relations will be introduced to avoid unbound variables in rule heads (default: true)\n datalog.use_map_names (bool) use names from map files when displaying tuples (default: true)\n engine (symbol) Select: auto-config, datalog, bmc, spacer (default: auto-config)\n generate_proof_trace (bool) trace for 'sat' answer as proof object (default: false)\n print_aig (symbol) Dump clauses in AIG text format (AAG) to the given file name (default: )\n print_answer (bool) print answer instance(s) to query (default: false)\n print_boogie_certificate (bool) print certificate for reachability or non-reachability using a format understood by Boogie (default: false)\n print_certificate (bool) print certificate for reachability or non-reachability (default: false)\n print_fixedpoint_extensions (bool) use SMT-LIB2 fixedpoint extensions, instead of pure SMT2, when printing rules (default: true)\n print_low_level_smt2 (bool) use (faster) low-level SMT2 printer (the printer is scalable but the result may not be as readable) (default: false)\n print_statistics (bool) print statistics (default: false)\n print_with_variable_declarations (bool) use variable declarations when displaying rules (instead of attempting to use original names) (default: true)\n spacer.arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 2)\n spacer.blast_term_ite_inflation (unsigned int) Maximum inflation for non-Boolean ite-terms expansion: 0 (none), k (multiplicative) (default: 3)\n spacer.ctp (bool) Enable counterexample-to-pushing (default: true)\n spacer.dump_benchmarks (bool) Dump SMT queries as benchmarks (default: false)\n spacer.dump_threshold (double) Threshold in seconds on dumping benchmarks (default: 5.0)\n spacer.elim_aux (bool) Eliminate auxiliary variables in reachability facts (default: true)\n spacer.eq_prop (bool) Enable equality and bound propagation in arithmetic (default: true)\n spacer.expand_bnd (bool) Enable expand-bound lemma generalization (default: false)\n spacer.gg.concretize (bool) Enable global guidance concretize (default: true)\n spacer.gg.conjecture (bool) Enable global guidance conjecture (default: true)\n spacer.gg.subsume (bool) Enable global guidance subsume (default: true)\n spacer.global (bool) Enable global guidance (default: false)\n spacer.gpdr (bool) Use GPDR solving strategy for non-linear CHC (default: false)\n spacer.gpdr.bfs (bool) Use BFS exploration strategy for expanding model search (default: true)\n spacer.ground_pobs (bool) Ground pobs by using values from a model (default: true)\n spacer.iuc (unsigned int) 0 = use old implementation of unsat-core-generation, 1 = use new implementation of IUC generation, 2 = use new implementation of IUC + min-cut optimization (default: 1)\n spacer.iuc.arith (unsigned int) 0 = use simple Farkas plugin, 1 = use simple Farkas plugin with constant from other partition (like old unsat-core-generation),2 = use Gaussian elimination optimization (broken), 3 = use additive IUC plugin (default: 1)\n spacer.iuc.debug_proof (bool) prints proof used by unsat-core-learner for debugging purposes (debugging) (default: false)\n spacer.iuc.old_hyp_reducer (bool) use old hyp reducer instead of new implementation, for debugging only (default: false)\n spacer.iuc.print_farkas_stats (bool) prints for each proof how many Farkas lemmas it contains and how many of these participate in the cut (for debugging) (default: false)\n spacer.iuc.split_farkas_literals (bool) Split Farkas literals (default: false)\n spacer.keep_proxy (bool) keep proxy variables (internal parameter) (default: true)\n spacer.logic (symbol) SMT-LIB logic to configure internal SMT solvers (default: )\n spacer.max_level (unsigned int) Maximum level to explore (default: 4294967295)\n spacer.max_num_contexts (unsigned int) maximal number of contexts to create (default: 500)\n spacer.mbqi (bool) Enable mbqi (default: true)\n spacer.min_level (unsigned int) Minimal level to explore (default: 0)\n spacer.native_mbp (bool) Use native mbp of Z3 (default: true)\n spacer.order_children (unsigned int) SPACER: order of enqueuing children in non-linear rules : 0 (original), 1 (reverse), 2 (random) (default: 0)\n spacer.p3.share_invariants (bool) Share invariants lemmas (default: false)\n spacer.p3.share_lemmas (bool) Share frame lemmas (default: false)\n spacer.propagate (bool) Enable propagate/pushing phase (default: true)\n spacer.push_pob (bool) push blocked pobs to higher level (default: false)\n spacer.push_pob_max_depth (unsigned int) Maximum depth at which push_pob is enabled (default: 4294967295)\n spacer.q3 (bool) Allow quantified lemmas in frames (default: true)\n spacer.q3.instantiate (bool) Instantiate quantified lemmas (default: true)\n spacer.q3.qgen.normalize (bool) normalize cube before quantified generalization (default: true)\n spacer.q3.use_qgen (bool) use quantified lemma generalizer (default: false)\n spacer.random_seed (unsigned int) Random seed to be used by SMT solver (default: 0)\n spacer.reach_dnf (bool) Restrict reachability facts to DNF (default: true)\n spacer.reset_pob_queue (bool) SPACER: reset pob obligation queue when entering a new level (default: true)\n spacer.restart_initial_threshold (unsigned int) Initial threshold for restarts (default: 10)\n spacer.restarts (bool) Enable resetting obligation queue (default: false)\n spacer.simplify_lemmas_post (bool) simplify derived lemmas after inductive propagation (default: false)\n spacer.simplify_lemmas_pre (bool) simplify derived lemmas before inductive propagation (default: false)\n spacer.simplify_pob (bool) simplify pobs by removing redundant constraints (default: false)\n spacer.trace_file (symbol) Log file for progress events (default: )\n spacer.use_array_eq_generalizer (bool) SPACER: attempt to generalize lemmas with array equalities (default: true)\n spacer.use_bg_invs (bool) Enable external background invariants (default: false)\n spacer.use_derivations (bool) SPACER: using derivation mechanism to cache intermediate results for non-linear rules (default: true)\n spacer.use_euf_gen (bool) Generalize lemmas and pobs using implied equalities (default: false)\n spacer.use_inc_clause (bool) Use incremental clause to represent trans (default: true)\n spacer.use_inductive_generalizer (bool) generalize lemmas using induction strengthening (default: true)\n spacer.use_iuc (bool) Enable Interpolating Unsat Core(IUC) for lemma generalization (default: true)\n spacer.use_lemma_as_cti (bool) SPACER: use a lemma instead of a CTI in flexible_trace (default: false)\n spacer.use_lim_num_gen (bool) Enable limit numbers generalizer to get smaller numbers (default: false)\n spacer.validate_lemmas (bool) Validate each lemma after generalization (default: false)\n spacer.weak_abs (bool) Weak abstraction (default: true)\n tab.selection (symbol) selection method for tabular strategy: weight (default), first, var-use (default: weight)\n timeout (unsigned int) (default: infty) timeout in milliseconds. (default: 4294967295)\n validate (bool) validate result (by proof checking or model checking) (default: false)\n xform.array_blast (bool) try to eliminate local array terms using Ackermannization -- some array terms may remain (default: false)\n xform.array_blast_full (bool) eliminate all local array variables by QE (default: false)\n xform.bit_blast (bool) bit-blast bit-vectors (default: false)\n xform.coalesce_rules (bool) coalesce rules (default: false)\n xform.coi (bool) use cone of influence simplification (default: true)\n xform.compress_unbound (bool) compress tails with unbound variables (default: true)\n xform.elim_term_ite (bool) Eliminate term-ite expressions (default: false)\n xform.elim_term_ite.inflation (unsigned int) Maximum inflation for non-Boolean ite-terms blasting: 0 (none), k (multiplicative) (default: 3)\n xform.fix_unbound_vars (bool) fix unbound variables in tail (default: false)\n xform.inline_eager (bool) try eager inlining of rules (default: true)\n xform.inline_linear (bool) try linear inlining method (default: true)\n xform.inline_linear_branch (bool) try linear inlining method with potential expansion (default: false)\n xform.instantiate_arrays (bool) Transforms P(a) into P(i, a[i] a) (default: false)\n xform.instantiate_arrays.enforce (bool) Transforms P(a) into P(i, a[i]), discards a from predicate (default: false)\n xform.instantiate_arrays.nb_quantifier (unsigned int) Gives the number of quantifiers per array (default: 1)\n xform.instantiate_arrays.slice_technique (symbol) => GetId(i) = i, => GetId(i) = true (default: no-slicing)\n xform.instantiate_quantifiers (bool) instantiate quantified Horn clauses using E-matching heuristic (default: false)\n xform.magic (bool) perform symbolic magic set transformation (default: false)\n xform.quantify_arrays (bool) create quantified Horn clauses from clauses with arrays (default: false)\n xform.scale (bool) add scaling variable to linear real arithmetic clauses (default: false)\n xform.slice (bool) simplify clause set using slicing (default: true)\n xform.subsumption_checker (bool) Enable subsumption checker (no support for model conversion) (default: true)\n xform.tail_simplifier_pve (bool) propagate_variable_equivalences (default: true)\n xform.transform_arrays (bool) Rewrites arrays equalities and applies select over store (default: false)\n xform.unfold_rules (unsigned int) unfold rules statically using iterative squaring (default: 0)\n- horn-simplify simplify horn clauses.\n bmc.linear_unrolling_depth (unsigned int) Maximal level to explore (default: 4294967295)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n datalog.all_or_nothing_deltas (bool) compile rules so that it is enough for the delta relation in union and widening operations to determine only whether the updated relation was modified or not (default: false)\n datalog.check_relation (symbol) name of default relation to check. operations on the default relation will be verified using SMT solving (default: null)\n datalog.compile_with_widening (bool) widening will be used to compile recursive rules (default: false)\n datalog.dbg_fpr_nonempty_relation_signature (bool) if true, finite_product_relation will attempt to avoid creating inner relation with empty signature by putting in half of the table columns, if it would have been empty otherwise (default: false)\n datalog.default_relation (symbol) default relation implementation: external_relation, pentagon (default: pentagon)\n datalog.default_table (symbol) default table implementation: sparse, hashtable, bitvector, interval (default: sparse)\n datalog.default_table_checked (bool) if true, the default table will be default_table inside a wrapper that checks that its results are the same as of default_table_checker table (default: false)\n datalog.default_table_checker (symbol) see default_table_checked (default: null)\n datalog.explanations_on_relation_level (bool) if true, explanations are generated as history of each relation, rather than per fact (generate_explanations must be set to true for this option to have any effect) (default: false)\n datalog.generate_explanations (bool) produce explanations for produced facts when using the datalog engine (default: false)\n datalog.initial_restart_timeout (unsigned int) length of saturation run before the first restart (in ms), zero means no restarts (default: 0)\n datalog.magic_sets_for_queries (bool) magic set transformation will be used for queries (default: false)\n datalog.output_profile (bool) determines whether profile information should be output when outputting Datalog rules or instructions (default: false)\n datalog.print.tuples (bool) determines whether tuples for output predicates should be output (default: true)\n datalog.profile_timeout_milliseconds (unsigned int) instructions and rules that took less than the threshold will not be printed when printed the instruction/rule list (default: 0)\n datalog.similarity_compressor (bool) rules that differ only in values of constants will be merged into a single rule (default: true)\n datalog.similarity_compressor_threshold (unsigned int) if similarity_compressor is on, this value determines how many similar rules there must be in order for them to be merged (default: 11)\n datalog.subsumption (bool) if true, removes/filters predicates with total transitions (default: true)\n datalog.timeout (unsigned int) Time limit used for saturation (default: 0)\n datalog.unbound_compressor (bool) auxiliary relations will be introduced to avoid unbound variables in rule heads (default: true)\n datalog.use_map_names (bool) use names from map files when displaying tuples (default: true)\n engine (symbol) Select: auto-config, datalog, bmc, spacer (default: auto-config)\n generate_proof_trace (bool) trace for 'sat' answer as proof object (default: false)\n print_aig (symbol) Dump clauses in AIG text format (AAG) to the given file name (default: )\n print_answer (bool) print answer instance(s) to query (default: false)\n print_boogie_certificate (bool) print certificate for reachability or non-reachability using a format understood by Boogie (default: false)\n print_certificate (bool) print certificate for reachability or non-reachability (default: false)\n print_fixedpoint_extensions (bool) use SMT-LIB2 fixedpoint extensions, instead of pure SMT2, when printing rules (default: true)\n print_low_level_smt2 (bool) use (faster) low-level SMT2 printer (the printer is scalable but the result may not be as readable) (default: false)\n print_statistics (bool) print statistics (default: false)\n print_with_variable_declarations (bool) use variable declarations when displaying rules (instead of attempting to use original names) (default: true)\n spacer.arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 2)\n spacer.blast_term_ite_inflation (unsigned int) Maximum inflation for non-Boolean ite-terms expansion: 0 (none), k (multiplicative) (default: 3)\n spacer.ctp (bool) Enable counterexample-to-pushing (default: true)\n spacer.dump_benchmarks (bool) Dump SMT queries as benchmarks (default: false)\n spacer.dump_threshold (double) Threshold in seconds on dumping benchmarks (default: 5.0)\n spacer.elim_aux (bool) Eliminate auxiliary variables in reachability facts (default: true)\n spacer.eq_prop (bool) Enable equality and bound propagation in arithmetic (default: true)\n spacer.expand_bnd (bool) Enable expand-bound lemma generalization (default: false)\n spacer.gg.concretize (bool) Enable global guidance concretize (default: true)\n spacer.gg.conjecture (bool) Enable global guidance conjecture (default: true)\n spacer.gg.subsume (bool) Enable global guidance subsume (default: true)\n spacer.global (bool) Enable global guidance (default: false)\n spacer.gpdr (bool) Use GPDR solving strategy for non-linear CHC (default: false)\n spacer.gpdr.bfs (bool) Use BFS exploration strategy for expanding model search (default: true)\n spacer.ground_pobs (bool) Ground pobs by using values from a model (default: true)\n spacer.iuc (unsigned int) 0 = use old implementation of unsat-core-generation, 1 = use new implementation of IUC generation, 2 = use new implementation of IUC + min-cut optimization (default: 1)\n spacer.iuc.arith (unsigned int) 0 = use simple Farkas plugin, 1 = use simple Farkas plugin with constant from other partition (like old unsat-core-generation),2 = use Gaussian elimination optimization (broken), 3 = use additive IUC plugin (default: 1)\n spacer.iuc.debug_proof (bool) prints proof used by unsat-core-learner for debugging purposes (debugging) (default: false)\n spacer.iuc.old_hyp_reducer (bool) use old hyp reducer instead of new implementation, for debugging only (default: false)\n spacer.iuc.print_farkas_stats (bool) prints for each proof how many Farkas lemmas it contains and how many of these participate in the cut (for debugging) (default: false)\n spacer.iuc.split_farkas_literals (bool) Split Farkas literals (default: false)\n spacer.keep_proxy (bool) keep proxy variables (internal parameter) (default: true)\n spacer.logic (symbol) SMT-LIB logic to configure internal SMT solvers (default: )\n spacer.max_level (unsigned int) Maximum level to explore (default: 4294967295)\n spacer.max_num_contexts (unsigned int) maximal number of contexts to create (default: 500)\n spacer.mbqi (bool) Enable mbqi (default: true)\n spacer.min_level (unsigned int) Minimal level to explore (default: 0)\n spacer.native_mbp (bool) Use native mbp of Z3 (default: true)\n spacer.order_children (unsigned int) SPACER: order of enqueuing children in non-linear rules : 0 (original), 1 (reverse), 2 (random) (default: 0)\n spacer.p3.share_invariants (bool) Share invariants lemmas (default: false)\n spacer.p3.share_lemmas (bool) Share frame lemmas (default: false)\n spacer.propagate (bool) Enable propagate/pushing phase (default: true)\n spacer.push_pob (bool) push blocked pobs to higher level (default: false)\n spacer.push_pob_max_depth (unsigned int) Maximum depth at which push_pob is enabled (default: 4294967295)\n spacer.q3 (bool) Allow quantified lemmas in frames (default: true)\n spacer.q3.instantiate (bool) Instantiate quantified lemmas (default: true)\n spacer.q3.qgen.normalize (bool) normalize cube before quantified generalization (default: true)\n spacer.q3.use_qgen (bool) use quantified lemma generalizer (default: false)\n spacer.random_seed (unsigned int) Random seed to be used by SMT solver (default: 0)\n spacer.reach_dnf (bool) Restrict reachability facts to DNF (default: true)\n spacer.reset_pob_queue (bool) SPACER: reset pob obligation queue when entering a new level (default: true)\n spacer.restart_initial_threshold (unsigned int) Initial threshold for restarts (default: 10)\n spacer.restarts (bool) Enable resetting obligation queue (default: false)\n spacer.simplify_lemmas_post (bool) simplify derived lemmas after inductive propagation (default: false)\n spacer.simplify_lemmas_pre (bool) simplify derived lemmas before inductive propagation (default: false)\n spacer.simplify_pob (bool) simplify pobs by removing redundant constraints (default: false)\n spacer.trace_file (symbol) Log file for progress events (default: )\n spacer.use_array_eq_generalizer (bool) SPACER: attempt to generalize lemmas with array equalities (default: true)\n spacer.use_bg_invs (bool) Enable external background invariants (default: false)\n spacer.use_derivations (bool) SPACER: using derivation mechanism to cache intermediate results for non-linear rules (default: true)\n spacer.use_euf_gen (bool) Generalize lemmas and pobs using implied equalities (default: false)\n spacer.use_inc_clause (bool) Use incremental clause to represent trans (default: true)\n spacer.use_inductive_generalizer (bool) generalize lemmas using induction strengthening (default: true)\n spacer.use_iuc (bool) Enable Interpolating Unsat Core(IUC) for lemma generalization (default: true)\n spacer.use_lemma_as_cti (bool) SPACER: use a lemma instead of a CTI in flexible_trace (default: false)\n spacer.use_lim_num_gen (bool) Enable limit numbers generalizer to get smaller numbers (default: false)\n spacer.validate_lemmas (bool) Validate each lemma after generalization (default: false)\n spacer.weak_abs (bool) Weak abstraction (default: true)\n tab.selection (symbol) selection method for tabular strategy: weight (default), first, var-use (default: weight)\n timeout (unsigned int) (default: infty) timeout in milliseconds. (default: 4294967295)\n validate (bool) validate result (by proof checking or model checking) (default: false)\n xform.array_blast (bool) try to eliminate local array terms using Ackermannization -- some array terms may remain (default: false)\n xform.array_blast_full (bool) eliminate all local array variables by QE (default: false)\n xform.bit_blast (bool) bit-blast bit-vectors (default: false)\n xform.coalesce_rules (bool) coalesce rules (default: false)\n xform.coi (bool) use cone of influence simplification (default: true)\n xform.compress_unbound (bool) compress tails with unbound variables (default: true)\n xform.elim_term_ite (bool) Eliminate term-ite expressions (default: false)\n xform.elim_term_ite.inflation (unsigned int) Maximum inflation for non-Boolean ite-terms blasting: 0 (none), k (multiplicative) (default: 3)\n xform.fix_unbound_vars (bool) fix unbound variables in tail (default: false)\n xform.inline_eager (bool) try eager inlining of rules (default: true)\n xform.inline_linear (bool) try linear inlining method (default: true)\n xform.inline_linear_branch (bool) try linear inlining method with potential expansion (default: false)\n xform.instantiate_arrays (bool) Transforms P(a) into P(i, a[i] a) (default: false)\n xform.instantiate_arrays.enforce (bool) Transforms P(a) into P(i, a[i]), discards a from predicate (default: false)\n xform.instantiate_arrays.nb_quantifier (unsigned int) Gives the number of quantifiers per array (default: 1)\n xform.instantiate_arrays.slice_technique (symbol) => GetId(i) = i, => GetId(i) = true (default: no-slicing)\n xform.instantiate_quantifiers (bool) instantiate quantified Horn clauses using E-matching heuristic (default: false)\n xform.magic (bool) perform symbolic magic set transformation (default: false)\n xform.quantify_arrays (bool) create quantified Horn clauses from clauses with arrays (default: false)\n xform.scale (bool) add scaling variable to linear real arithmetic clauses (default: false)\n xform.slice (bool) simplify clause set using slicing (default: true)\n xform.subsumption_checker (bool) Enable subsumption checker (no support for model conversion) (default: true)\n xform.tail_simplifier_pve (bool) propagate_variable_equivalences (default: true)\n xform.transform_arrays (bool) Rewrites arrays equalities and applies select over store (default: false)\n xform.unfold_rules (unsigned int) unfold rules statically using iterative squaring (default: 0)\n- nlsat (try to) solve goal using a nonlinear arithmetic solver.\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n max_conflicts (unsigned int) maximum number of conflicts. (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n reorder (bool) reorder variables. (default: true)\n seed (unsigned int) random seed. (default: 0)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qfnra-nlsat builtin strategy for solving QF_NRA problems using only nlsat.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n reorder (bool) reorder variables. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seed (unsigned int) random seed. (default: 0)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n theory_solver (bool) theory solvers. (default: true)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qe-light apply light-weight quantifier elimination.\n- nlqsat apply a NL-QSAT solver.\n- qe apply quantifier elimination.\n eliminate_variables_as_block (bool) (default: true) eliminate variables as a block (true) or one at a time (false)\n qe_nonlinear (bool) (default: false) enable virtual term substitution.\n- qsat apply a QSAT solver.\n- qe2 apply a QSAT based quantifier elimination.\n- qe_rec apply a QSAT based quantifier elimination recursively.\n- psat (try to) solve goal using a parallel SAT solver.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n learned (bool) (default: false) collect also learned clauses.\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- sat (try to) solve goal using a SAT solver.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n learned (bool) (default: false) collect also learned clauses.\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- sat-preprocess Apply SAT solver preprocessing procedures (bounded resolution, Boolean constant propagation, 2-SAT, subsumption, subsumption resolution).\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n learned (bool) (default: false) collect also learned clauses.\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- ctx-solver-simplify apply solver-based contextual simplification rules.\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- psmt builtin strategy for SMT tactic in parallel.\n- unit-subsume-simplify unit subsumption simplification.\n- aig simplify Boolean structure using AIGs.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n- add-bounds add bounds to unbounded variables (under approximation).\n add_bound_lower (rational) (default: -2) lower bound to be added to unbounded variables.\n add_bound_upper (rational) (default: 2) upper bound to be added to unbounded variables.\n- card2bv convert pseudo-boolean constraints to bit-vectors.\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n keep_cardinality_constraints (bool) retain cardinality constraints for solver (default: true)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n- degree-shift try to reduce degree of polynomials (remark: :mul2power simplification is automatically applied).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- diff-neq specialized solver for integer arithmetic problems that contain only atoms of the form (<= k x) (<= x k) and (not (= (- x y) k)), where x and y are constants and k is a numeral, and all constants are bounded.\n diff_neq_max_k (unsigned int) maximum variable upper bound for diff neq solver. (default: 1024)\n- eq2bv convert integer variables used as finite domain elements to bit-vectors.\n- factor polynomial factorization.\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n- fix-dl-var if goal is in the difference logic fragment, then fix the variable with the most number of occurrences at 0.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- fm eliminate variables using fourier-motzkin elimination.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n fm_cutoff1 (unsigned int) first cutoff for FM based on maximum number of lower/upper occurrences. (default: 8)\n fm_cutoff2 (unsigned int) second cutoff for FM based on num_lower * num_upper occurrences. (default: 256)\n fm_extra (unsigned int) max. increase on the number of inequalities for each FM variable elimination step. (default: 0)\n fm_limit (unsigned int) maximum number of constraints, monomials, clauses visited during FM. (default: 5000000)\n fm_occ (bool) consider inequalities occurring in clauses for FM. (default: false)\n fm_real_only (bool) consider only real variables for fourier-motzkin elimination. (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n produce_models (bool) model generation. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- lia2card introduce cardinality constraints from 0-1 integer.\n compile_equality (bool) (default:false) compile equalities into pseudo-Boolean equality\n- lia2pb convert bounded integer variables into a sequence of 0-1 variables.\n lia2pb_max_bits (unsigned int) (default: 32) maximum number of bits to be used (per variable) in lia2pb.\n lia2pb_partial (bool) (default: false) partial lia2pb conversion.\n lia2pb_total_bits (unsigned int) (default: 2048) total number of bits to be used (per problem) in lia2pb.\n- nla2bv convert a nonlinear arithmetic problem into a bit-vector problem, in most cases the resultant goal is an under approximation and is useul for finding models.\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n- normalize-bounds replace a variable x with lower bound k <= x with x' = x - k.\n norm_int_only (bool) normalize only the bounds of integer constants. (default: true)\n produce_models (bool) model generation. (default: false)\n- pb2bv convert pseudo-boolean constraints to bit-vectors.\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n pb2bv_all_clauses_limit (unsigned int) (default: 8) maximum number of literals for using equivalent CNF encoding of PB constraint.\n pb2bv_cardinality_limit (unsigned int) (default: inf) limit for using arc-consistent cardinality constraint encoding.\n- propagate-ineqs propagate ineqs/bounds, remove subsumed inequalities.\n- purify-arith eliminate unnecessary operators: -, /, div, mod, rem, is-int, to-int, ^, root-objects.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n sk_hack (bool) hack for VCC (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- recover-01 recover 0-1 variables hidden as Boolean variables.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n recover_01_max_bits (unsigned int) maximum number of bits to consider in a clause. (default: 10)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- bit-blast reduce bit-vector expressions into SAT.\n blast_add (bool) bit-blast adders. (default: true)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- bv1-blast reduce bit-vector expressions into bit-vectors of size 1 (notes: only equality, extract and concat are supported).\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- bv_bound_chk attempts to detect inconsistencies of bounds on bv expressions.\n- propagate-bv-bounds propagate bit-vector bounds by simplifying implied or contradictory bounds.\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n- propagate-bv-bounds-new propagate bit-vector bounds by simplifying implied or contradictory bounds.\n- reduce-bv-size try to reduce bit-vector sizes using inequalities.\n- bv-slice simplify using bit-vector slices.\n- bvarray2uf Rewrite bit-vector arrays into bit-vector (uninterpreted) functions.\n produce_models (bool) model generation. (default: false)\n- dt2bv eliminate finite domain data-types. Replace by bit-vectors.\n- elim-small-bv eliminate small, quantified bit-vectors by expansion.\n max_bits (unsigned int) (default: 4) maximum bit-vector size of quantified bit-vectors to be eliminated.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- max-bv-sharing use heuristics to maximize the sharing of bit-vector expressions such as adders and multipliers.\n- blast-term-ite blast term if-then-else by hoisting them.\n max_inflation (unsigned int) (default: infinity) multiplicative factor of initial term size. (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- cofactor-term-ite eliminate term if-the-else using cofactors.\n cofactor_equalities (bool) (default: true) use equalities to rewrite bodies of ite-expressions. This is potentially expensive.\n- collect-statistics Collects various statistics.\n- ctx-simplify apply contextual simplification rules.\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n- demodulator extracts equalities from quantifiers and applies them to simplify.\n- der destructive equality resolution.\n- distribute-forall distribute forall over conjunctions.\n- dom-simplify apply dominator simplification rules.\n- elim-term-ite eliminate term if-then-else by adding fresh auxiliary declarations.\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- elim-uncnstr2 eliminate unconstrained variables.\n- elim-uncnstr eliminate application containing unconstrained variables.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- elim-predicates eliminate predicates.\n- euf-completion simplify using equalities.\n- injectivity Identifies and applies injectivity axioms.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n produce_models (bool) model generation. (default: false)\n- snf put goal in skolem normal form.\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n sk_hack (bool) hack for VCC (default: false)\n- nnf put goal in negation normal form.\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n sk_hack (bool) hack for VCC (default: false)\n- occf put goal in one constraint per clause normal form (notes: fails if proof generation is enabled; only clauses are considered).\n- pb-preprocess pre-process pseudo-Boolean constraints a la Davis Putnam.\n- propagate-values2 propagate constants.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- propagate-values propagate constants.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- reduce-args reduce the number of arguments of function applications, when for all occurrences of a function f the i-th is a value.\n- simplify apply simplification rules.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- elim-and convert (and a b) into (not (or (not a) (not b))).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- solve-eqs solve for variables.\n context_solve (bool) solve equalities under disjunctions. (default: false)\n ite_solver (bool) use if-then-else solver. (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n theory_solver (bool) theory solvers. (default: true)\n- special-relations detect and replace by special relations.\n- split-clause split a clause in many subgoals.\n split_largest_clause (bool) (default: false) split the largest clause in the goal.\n- symmetry-reduce apply symmetry reduction.\n- tseitin-cnf convert goal into CNF using tseitin-like encoding (note: quantifiers are ignored).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- tseitin-cnf-core convert goal into CNF using tseitin-like encoding (note: quantifiers are ignored). This tactic does not apply required simplifications to the input goal like the tseitin-cnf tactic.\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n- qffd builtin strategy for solving QF_FD problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n axioms2files (bool) print negated theory axioms to separate files during search (default: false)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cancel_backup_file (symbol) file to save partial search state if search is canceled (default: )\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n compact (bool) try to compact function graph (i.e., function interpretations that are lookup tables) (default: true)\n completion (bool) enable/disable model completion (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inline_def (bool) inline local function definitions ignoring possible expansion (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n instantiations2console (bool) print quantifier instantiations to the console (default: false)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n lemmas2console (bool) print lemmas during search (default: false)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n partial (bool) enable/disable partial function interpretations (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n proof.check (bool) check proof logs (default: true)\n proof.log (symbol) log clause proof trail into a file (default: )\n proof.save (bool) save proof log into a proof object that can be extracted using (get-proof) (default: false)\n proof.trim (bool) trim and save proof into a proof object that an be extracted using (get-proof) (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rlimit (unsigned int) default resource limit used for solvers. Unrestricted when set to 0. (default: 0)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n smtlib2_log (symbol) file to save solver interaction (default: )\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n timeout (unsigned int) timeout on the solver object; overwrites a global timeout (default: 4294967295)\n user_functions (bool) include user defined functions in model (default: true)\n v1 (bool) use Z3 version 1.x pretty printer (default: false)\n v2 (bool) use Z3 version 2.x (x <= 16) pretty printer (default: false)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- pqffd builtin strategy for solving QF_FD problems in parallel.\n- smtfd builtin strategy for solving SMT problems by reduction to FD.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n axioms2files (bool) print negated theory axioms to separate files during search (default: false)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cancel_backup_file (symbol) file to save partial search state if search is canceled (default: )\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n compact (bool) try to compact function graph (i.e., function interpretations that are lookup tables) (default: true)\n completion (bool) enable/disable model completion (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inline_def (bool) inline local function definitions ignoring possible expansion (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n instantiations2console (bool) print quantifier instantiations to the console (default: false)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n lemmas2console (bool) print lemmas during search (default: false)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_lemmas (unsigned int) maximal number of lemmas per round (default: 10)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n partial (bool) enable/disable partial function interpretations (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n proof.check (bool) check proof logs (default: true)\n proof.log (symbol) log clause proof trail into a file (default: )\n proof.save (bool) save proof log into a proof object that can be extracted using (get-proof) (default: false)\n proof.trim (bool) trim and save proof into a proof object that an be extracted using (get-proof) (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rlimit (unsigned int) default resource limit used for solvers. Unrestricted when set to 0. (default: 0)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n smtlib2_log (symbol) file to save solver interaction (default: )\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n timeout (unsigned int) timeout on the solver object; overwrites a global timeout (default: 4294967295)\n user_functions (bool) include user defined functions in model (default: true)\n v1 (bool) use Z3 version 1.x pretty printer (default: false)\n v2 (bool) use Z3 version 2.x (x <= 16) pretty printer (default: false)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- fpa2bv convert floating point numbers to bit-vectors.\n- qffp (try to) solve goal using the tactic for QF_FP.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qffpbv (try to) solve goal using the tactic for QF_FPBV (floats+bit-vectors).\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qffplra (try to) solve goal using the tactic for QF_FPLRA.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- default default strategy used when no logic is specified.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n add_bound_lower (rational) (default: -2) lower bound to be added to unbounded variables.\n add_bound_upper (rational) (default: 2) upper bound to be added to unbounded variables.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n axioms2files (bool) print negated theory axioms to separate files during search (default: false)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n cancel_backup_file (symbol) file to save partial search state if search is canceled (default: )\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n cofactor_equalities (bool) (default: true) use equalities to rewrite bodies of ite-expressions. This is potentially expensive.\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n compact (bool) try to compact function graph (i.e., function interpretations that are lookup tables) (default: true)\n compile_equality (bool) (default:false) compile equalities into pseudo-Boolean equality\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n completion (bool) enable/disable model completion (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_def (bool) inline local function definitions ignoring possible expansion (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n instantiations2console (bool) print quantifier instantiations to the console (default: false)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n lemmas2console (bool) print lemmas during search (default: false)\n lia2pb_max_bits (unsigned int) (default: 32) maximum number of bits to be used (per variable) in lia2pb.\n lia2pb_partial (bool) (default: false) partial lia2pb conversion.\n lia2pb_total_bits (unsigned int) (default: 2048) total number of bits to be used (per problem) in lia2pb.\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n norm_int_only (bool) normalize only the bounds of integer constants. (default: true)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n partial (bool) enable/disable partial function interpretations (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n pb2bv_all_clauses_limit (unsigned int) (default: 8) maximum number of literals for using equivalent CNF encoding of PB constraint.\n pb2bv_cardinality_limit (unsigned int) (default: inf) limit for using arc-consistent cardinality constraint encoding.\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n produce_models (bool) model generation. (default: false)\n proof.check (bool) check proof logs (default: true)\n proof.log (symbol) log clause proof trail into a file (default: )\n proof.save (bool) save proof log into a proof object that can be extracted using (get-proof) (default: false)\n proof.trim (bool) trim and save proof into a proof object that an be extracted using (get-proof) (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n rlimit (unsigned int) default resource limit used for solvers. Unrestricted when set to 0. (default: 0)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n smtlib2_log (symbol) file to save solver interaction (default: )\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) number of parallel threads to use (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n timeout (unsigned int) timeout on the solver object; overwrites a global timeout (default: 4294967295)\n user_functions (bool) include user defined functions in model (default: true)\n v1 (bool) use Z3 version 1.x pretty printer (default: false)\n v2 (bool) use Z3 version 2.x (x <= 16) pretty printer (default: false)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- solver-subsumption remove assertions that are subsumed.\n max_conflicts (unsigned int) (default: 2) maximal number of conflicts allowed per solver call.\n- qfbv-sls (try to) solve using stochastic local search for QF_BV.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n early_prune (bool) use early pruning for score prediction (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_restarts (unsigned int) maximum number of restarts (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n paws_init (unsigned int) initial/minimum assertion weights (default: 40)\n paws_sp (unsigned int) smooth assertion weights with probability paws_sp / 1024 (default: 52)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n random_offset (bool) use random offset for candidate evaluation (default: true)\n random_seed (unsigned int) random seed (default: 0)\n rescore (bool) rescore/normalize top-level score every base restart interval (default: true)\n restart_base (unsigned int) base restart interval given by moves per run (default: 100)\n restart_init (bool) initialize to 0 or random value (= 1) after restart (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scale_unsat (double) scale score of unsat expressions by this factor (default: 0.5)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n theory_solver (bool) theory solvers. (default: true)\n track_unsat (bool) keep a list of unsat assertions as done in SAT - currently disabled internally (default: false)\n vns_mc (unsigned int) in local minima, try Monte Carlo sampling vns_mc many 2-bit-flips per bit (default: 0)\n vns_repick (bool) in local minima, try picking a different assertion (only for walksat) (default: false)\n walksat (bool) use walksat assertion selection (instead of gsat) (default: true)\n walksat_repick (bool) repick assertion if randomizing in local minima (default: true)\n walksat_ucb (bool) use bandit heuristic for walksat assertion selection (instead of random) (default: true)\n walksat_ucb_constant (double) the ucb constant c in the term score + c * f(touched) (default: 20.0)\n walksat_ucb_forget (double) scale touched by this factor every base restart interval (default: 1.0)\n walksat_ucb_init (bool) initialize total ucb touched to formula size (default: false)\n walksat_ucb_noise (double) add noise 0 <= 256 * ucb_noise to ucb score for assertion selection (default: 0.0002)\n wp (unsigned int) random walk with probability wp / 1024 (default: 100)\n- nra builtin strategy for solving NRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qfaufbv builtin strategy for solving QF_AUFBV problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qfauflia builtin strategy for solving QF_AUFLIA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- qfbv builtin strategy for solving QF_BV problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qfidl builtin strategy for solving QF_IDL problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n diff_neq_max_k (unsigned int) maximum variable upper bound for diff neq solver. (default: 1024)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n lia2pb_max_bits (unsigned int) (default: 32) maximum number of bits to be used (per variable) in lia2pb.\n lia2pb_partial (bool) (default: false) partial lia2pb conversion.\n lia2pb_total_bits (unsigned int) (default: 2048) total number of bits to be used (per problem) in lia2pb.\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n norm_int_only (bool) normalize only the bounds of integer constants. (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n pb2bv_all_clauses_limit (unsigned int) (default: 8) maximum number of literals for using equivalent CNF encoding of PB constraint.\n pb2bv_cardinality_limit (unsigned int) (default: inf) limit for using arc-consistent cardinality constraint encoding.\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n produce_models (bool) model generation. (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) number of parallel threads to use (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qflia builtin strategy for solving QF_LIA problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n add_bound_lower (rational) (default: -2) lower bound to be added to unbounded variables.\n add_bound_upper (rational) (default: 2) upper bound to be added to unbounded variables.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n lia2pb_max_bits (unsigned int) (default: 32) maximum number of bits to be used (per variable) in lia2pb.\n lia2pb_partial (bool) (default: false) partial lia2pb conversion.\n lia2pb_total_bits (unsigned int) (default: 2048) total number of bits to be used (per problem) in lia2pb.\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n norm_int_only (bool) normalize only the bounds of integer constants. (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n pb2bv_all_clauses_limit (unsigned int) (default: 8) maximum number of literals for using equivalent CNF encoding of PB constraint.\n pb2bv_cardinality_limit (unsigned int) (default: inf) limit for using arc-consistent cardinality constraint encoding.\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n produce_models (bool) model generation. (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qflra builtin strategy for solving QF_LRA problems.\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n induction (bool) enable generation of induction lemmas (default: false)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- qfnia builtin strategy for solving QF_NIA problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n cofactor_equalities (bool) (default: true) use equalities to rewrite bodies of ite-expressions. This is potentially expensive.\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n compile_equality (bool) (default:false) compile equalities into pseudo-Boolean equality\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints for solver (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) number of parallel threads to use (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qfnra builtin strategy for solving QF_NRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qfuf builtin strategy for solving QF_UF problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- qfufbv builtin strategy for solving QF_UFBV problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qfufbv_ackr A tactic for solving QF_UFBV based on Ackermannization.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- ufnia builtin strategy for solving UFNIA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- uflra builtin strategy for solving UFLRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- auflia builtin strategy for solving AUFLIA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- auflira builtin strategy for solving AUFLIRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- aufnira builtin strategy for solving AUFNIRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- lra builtin strategy for solving LRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- lia builtin strategy for solving LIA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- lira builtin strategy for solving LIRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- smt apply a SAT based SMT solver.\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n induction (bool) enable generation of induction lemmas (default: false)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- skip do nothing tactic.\n- fail always fail tactic.\n- fail-if-undecided fail if goal is undecided.\n- macro-finder Identifies and applies macros.\n elim_and (bool) (default: false) eliminate conjunctions during (internal) calls to the simplifier.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n- quasi-macros Identifies and applies quasi-macros.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n- ufbv-rewriter Applies UFBV-specific rewriting rules, mainly demodulation.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n- bv builtin strategy for solving BV problems (with quantifiers).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- ufbv builtin strategy for solving UFBV problems (with quantifiers).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\nbuiltin probes:\n- ackr-bound-probe A probe to give an upper bound of Ackermann congruence lemmas that a formula might generate.\n- is-unbounded true if the goal contains integer/real constants that do not have lower/upper bounds.\n- is-pb true if the goal is a pseudo-boolean problem.\n- arith-max-deg max polynomial total degree of an arithmetic atom.\n- arith-avg-deg avg polynomial total degree of an arithmetic atom.\n- arith-max-bw max coefficient bit width.\n- arith-avg-bw avg coefficient bit width.\n- is-qflia true if the goal is in QF_LIA.\n- is-qfauflia true if the goal is in QF_AUFLIA.\n- is-qflra true if the goal is in QF_LRA.\n- is-qflira true if the goal is in QF_LIRA.\n- is-ilp true if the goal is ILP.\n- is-qfnia true if the goal is in QF_NIA (quantifier-free nonlinear integer arithmetic).\n- is-qfnra true if the goal is in QF_NRA (quantifier-free nonlinear real arithmetic).\n- is-nia true if the goal is in NIA (nonlinear integer arithmetic, formula may have quantifiers).\n- is-nra true if the goal is in NRA (nonlinear real arithmetic, formula may have quantifiers).\n- is-nira true if the goal is in NIRA (nonlinear integer and real arithmetic, formula may have quantifiers).\n- is-lia true if the goal is in LIA (linear integer arithmetic, formula may have quantifiers).\n- is-lra true if the goal is in LRA (linear real arithmetic, formula may have quantifiers).\n- is-lira true if the goal is in LIRA (linear integer and real arithmetic, formula may have quantifiers).\n- is-qfufnra true if the goal is QF_UFNRA (quantifier-free nonlinear real arithmetic with other theories).\n- is-qfbv-eq true if the goal is in a fragment of QF_BV which uses only =, extract, concat.\n- is-qffp true if the goal is in QF_FP (floats).\n- is-qffpbv true if the goal is in QF_FPBV (floats+bit-vectors).\n- is-qffplra true if the goal is in QF_FPLRA.\n- memory amount of used memory in megabytes.\n- depth depth of the input goal.\n- size number of assertions in the given goal.\n- num-exprs number of expressions/terms in the given goal.\n- num-consts number of non Boolean constants in the given goal.\n- num-bool-consts number of Boolean constants in the given goal.\n- num-arith-consts number of arithmetic constants in the given goal.\n- num-bv-consts number of bit-vector constants in the given goal.\n- produce-proofs true if proof generation is enabled for the given goal.\n- produce-model true if model generation is enabled for the given goal.\n- produce-unsat-cores true if unsat-core generation is enabled for the given goal.\n- has-quantifiers true if the goal contains quantifiers.\n- has-patterns true if the goal contains quantifiers with patterns.\n- is-propositional true if the goal is in propositional logic.\n- is-qfbv true if the goal is in QF_BV.\n- is-qfaufbv true if the goal is in QF_AUFBV.\n- is-quasi-pb true if the goal is quasi-pb.\n\"\n",error:"",status:"z3-ran",hash:"16d5fd2e2b789774ebd9e40e35f6222155230b5b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Z3 comes equipped with the following tactic combinators (aka tacticals):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(then t s)")," applies /t to the input goal and /s to every subgoal produced by /t."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(par-then t s)")," applies /t to the input goal and /s to every subgoal produced by /t in parallel."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(or-else t s)")," first applies /t to the given goal, if it fails then returns the result of /s applied to the given goal."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(par-or t s)")," applies /t and /s in parallel until one of them succeed. The tactic fails if /t and /s fails."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(repeat t)")," Keep applying the given tactic until no subgoal is modified by it."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(repeat t n)")," Keep applying the given tactic until no subgoal is modified by it, or the number of iterations is greater than /n."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(try-for t ms)")," Apply tactic /t to the input goal, if it does not return in /ms milliseconds, it fails."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(using-params t params)")," Apply the given tactic using the given parameters. ",(0,i.kt)("inlineCode",{parentName:"li"},"(! t params)")," is a shorthand for ",(0,i.kt)("inlineCode",{parentName:"li"},"(using-params t params)"),".")),(0,i.kt)("p",null,"The combinators ",(0,i.kt)("inlineCode",{parentName:"p"},"then"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"par-then"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"or-else")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"par-or")," accept arbitrary number of arguments. The following example demonstrate how to use these combinators."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(declare-const x Real)\n(declare-const y Real)\n(declare-const z Real)\n\n(assert (or (= x 0.0) (= x 1.0)))\n(assert (or (= y 0.0) (= y 1.0)))\n(assert (or (= z 0.0) (= z 1.0)))\n(assert (> (+ x y z) 2.0))\n\n(echo "split all...")\n(apply (repeat (or-else split-clause skip)))\n\n(echo "split at most 2...")\n(apply (repeat (or-else split-clause skip) 1))\n\n(echo "split and solve-eqs...")\n(apply (then (repeat (or-else split-clause skip)) solve-eqs))',result:{output:"split all...\n(goals\n(goal\n (= x 0.0)\n (= y 0.0)\n (= z 0.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 0.0)\n (= y 0.0)\n (= z 1.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 0.0)\n (= y 1.0)\n (= z 0.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 0.0)\n (= y 1.0)\n (= z 1.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 1.0)\n (= y 0.0)\n (= z 0.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 1.0)\n (= y 0.0)\n (= z 1.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 1.0)\n (= y 1.0)\n (= z 0.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 1.0)\n (= y 1.0)\n (= z 1.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n)\nsplit at most 2...\n(goals\n(goal\n (= x 0.0)\n (= y 0.0)\n (or (= z 0.0) (= z 1.0))\n (> (+ x y z) 2.0)\n :precision precise :depth 2)\n(goal\n (= x 0.0)\n (= y 1.0)\n (or (= z 0.0) (= z 1.0))\n (> (+ x y z) 2.0)\n :precision precise :depth 2)\n(goal\n (= x 1.0)\n (= y 0.0)\n (or (= z 0.0) (= z 1.0))\n (> (+ x y z) 2.0)\n :precision precise :depth 2)\n(goal\n (= x 1.0)\n (= y 1.0)\n (or (= z 0.0) (= z 1.0))\n (> (+ x y z) 2.0)\n :precision precise :depth 2)\n)\nsplit and solve-eqs...\n(goals\n(goal\n :precision precise :depth 4)\n)\n",error:"",status:"z3-ran",hash:"11ef70effe8c48845a00f8b4eff30d9e6fb84cf4"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"In the last apply command, the tactic ",(0,i.kt)("inlineCode",{parentName:"p"},"solve-eqs")," discharges all but one goal. Note that, this tactic generates one goal: the empty goal which is trivially satisfiable (i.e., feasible)"),(0,i.kt)("p",null,"A tactic can be used to decide whether a set of assertions has a solution (i.e., is satisfiable) or not. The command ",(0,i.kt)("inlineCode",{parentName:"p"},"check-sat-using")," is similar to ",(0,i.kt)("inlineCode",{parentName:"p"},"check-sat"),", but uses the given tactic instead of the Z3 default solver for solving the current set of assertions. If the tactic produces the empty goal, then check-sat-using returns sat. If the tactic produces a single goal containing ",(0,i.kt)("inlineCode",{parentName:"p"},"False"),", then ",(0,i.kt)("inlineCode",{parentName:"p"},"check-sat-using")," returns ",(0,i.kt)("inlineCode",{parentName:"p"},"unsat"),". Otherwise, it returns ",(0,i.kt)("inlineCode",{parentName:"p"},"unknown"),"."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x (_ BitVec 16))\n(declare-const y (_ BitVec 16))\n\n(assert (= (bvor x y) (_ bv13 16)))\n(assert (bvslt x y))\n\n(check-sat-using (then simplify solve-eqs bit-blast sat))\n(get-model)",result:{output:"sat\n(\n (define-fun y () (_ BitVec 16)\n #x000d)\n (define-fun x () (_ BitVec 16)\n #x0004)\n)\n",error:"",status:"z3-ran",hash:"a1a0dd4086f477d75ae7ac11cada93ecffb4bf1e"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"In the example above, the tactic used implements a basic bit-vector solver using equation solving, bit-blasting, and a propositional SAT solver."),(0,i.kt)("p",null,"In the following example, we use the combinator using-params to configure our little solver. We also include the tactic aig which tries to compress Boolean formulas using And-Inverted Graphs."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x (_ BitVec 16))\n(declare-const y (_ BitVec 16))\n\n(assert (= (bvadd (bvmul (_ bv32 16) x) y) (_ bv13 16)))\n(assert (bvslt (bvand x y) (_ bv10 16)))\n(assert (bvsgt y (bvneg (_ bv100 16))))\n\n(check-sat-using (then (using-params simplify :mul2concat true)\n solve-eqs \n bit-blast \n aig\n sat))\n(get-model)\n(get-value ((bvand x y)))",result:{output:"sat\n(\n (define-fun y () (_ BitVec 16)\n #xffad)\n (define-fun x () (_ BitVec 16)\n #xf803)\n)\n(((bvand x y) #xf801))\n",error:"",status:"z3-ran",hash:"6e14d6c3e985299c1e0335bc507378af4f564b90"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The tactic ",(0,i.kt)("inlineCode",{parentName:"p"},"smt")," wraps the main solver in Z3 as a tactic."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n\n(assert (> x (+ y 1)))\n\n(check-sat-using smt)\n(get-model)",result:{output:"sat\n(\n (define-fun x () Int\n 0)\n (define-fun y () Int\n (- 2))\n)\n",error:"",status:"z3-ran",hash:"23c96dbd48afd1229415387ffe5150acbee000ed"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Now, we show how to implement a solver for integer arithmetic using SAT. The solver is complete only for problems where every variable has a lower and upper bound."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(declare-const z Int)\n\n(assert (and (> x 0) (< x 10)))\n(assert (and (> y 0) (< y 10)))\n(assert (and (> z 0) (< z 10)))\n(assert (= (+ (* 3 y) (* 2 x)) z))\n\n(check-sat-using (then (using-params simplify :arith-lhs true :som true)\n normalize-bounds\n lia2pb\n pb2bv\n bit-blast\n sat))\n(get-model)\n\n(reset)\n\n(declare-const x Int)\n(declare-const y Int)\n(declare-const z Int)\n\n(assert (= (+ (* 3 y) (* 2 x)) z))\n\n;; The next command will fail since x, y and z are not bounded.\n(check-sat-using (then (using-params simplify :arith-lhs true :som true)\n normalize-bounds\n lia2pb\n pb2bv\n bit-blast\n sat))\n(get-info :reason-unknown)",result:{output:'sat\n(\n (define-fun x () Int\n 1)\n (define-fun z () Int\n 5)\n (define-fun y () Int\n 1)\n)\nunknown\n(:reason-unknown "goal is in a fragment not supported by pb2bv. Offending expression: y")\n',error:"",status:"z3-ran",hash:"a2d087c9a9e2fd4a94001a156e46e31e11483202"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7560],{2364:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>u,toc:()=>f});var a=n(7462),i=(n(7294),n(3905)),o=n(7634),l=n.n(o);const r={title:"Tactics",sidebar_position:3},s=void 0,u={unversionedId:"strategies/tactics",id:"strategies/tactics",title:"Tactics",description:"Z3 comes equipped with many built-in tactics. The command (help-tactic) provides a short description of all built-in tactics.",source:"@site/docs-smtlib/03 - strategies/03 - tactics.md",sourceDirName:"03 - strategies",slug:"/strategies/tactics",permalink:"/z3guide/docs/strategies/tactics",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/03 - strategies/03 - tactics.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Tactics",sidebar_position:3},sidebar:"smtlibSidebar",previous:{title:"Goals",permalink:"/z3guide/docs/strategies/goals"},next:{title:"Probes",permalink:"/z3guide/docs/strategies/probes"}},d={},f=[],c={toc:f};function m(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Z3 comes equipped with many built-in tactics. The command (help-tactic) provides a short description of all built-in tactics."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(help-tactic)",result:{output:"\"combinators:\n- (and-then +) executes the given tactics sequentially.\n- (or-else +) tries the given tactics in sequence until one of them succeeds (i.e., the first that doesn't fail).\n- (par-or +) executes the given tactics in parallel until one of them succeeds (i.e., the first that doesn't fail).\n- (par-then ) executes tactic1 and then tactic2 to every subgoal produced by tactic1. All subgoals are processed in parallel.\n- (try-for ) executes the given tactic for at most milliseconds, it fails if the execution takes more than milliseconds.\n- (if ) if evaluates to true, then execute the first tactic. Otherwise execute the second.\n- (when ) shorthand for (if skip).\n- (fail-if ) fail if evaluates to true.\n- (using-params *) executes the given tactic using the given attributes, where ::= . ! is a syntax sugar for using-params.\nbuiltin tactics:\n- ackermannize_bv A tactic for performing full Ackermannization on bv instances.\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n- subpaving tactic for testing subpaving module.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n epsilon (unsigned int) (default: 20) value k s.t. a new lower (upper) bound for x is propagated only new-lower(x) > lower(k) + 1/k * max(min(upper(x) - lower(x), |lower|), 1) (new-upper(x) < upper(x) - 1/k * max(min(upper(x) - lower(x), |lower|), 1)). If k = 0, then this restriction is ignored.\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_bound (unsigned int) (default 10) value k s.t. a new upper (lower) bound for x is propagated only if upper(x) > -10^k or lower(x) = -oo (lower(x) < 10^k or upper(x) = oo)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) (default: 128) maximum depth of the subpaving tree.\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_nodes (unsigned int) (default: 8192) maximum number of nodes in the subpaving tree.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nth_root_precision (unsigned int) (default 8192) value k s.t. 1/k is the precision for computing the nth root in the subpaving module.\n numeral (symbol) (default: mpq) options: mpq, mpf, hwf, mpff, mpfx.\n print_nodes (bool) (default: false) display subpaving tree leaves.\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- horn apply tactic for horn clauses.\n bmc.linear_unrolling_depth (unsigned int) Maximal level to explore (default: 4294967295)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n datalog.all_or_nothing_deltas (bool) compile rules so that it is enough for the delta relation in union and widening operations to determine only whether the updated relation was modified or not (default: false)\n datalog.check_relation (symbol) name of default relation to check. operations on the default relation will be verified using SMT solving (default: null)\n datalog.compile_with_widening (bool) widening will be used to compile recursive rules (default: false)\n datalog.dbg_fpr_nonempty_relation_signature (bool) if true, finite_product_relation will attempt to avoid creating inner relation with empty signature by putting in half of the table columns, if it would have been empty otherwise (default: false)\n datalog.default_relation (symbol) default relation implementation: external_relation, pentagon (default: pentagon)\n datalog.default_table (symbol) default table implementation: sparse, hashtable, bitvector, interval (default: sparse)\n datalog.default_table_checked (bool) if true, the default table will be default_table inside a wrapper that checks that its results are the same as of default_table_checker table (default: false)\n datalog.default_table_checker (symbol) see default_table_checked (default: null)\n datalog.explanations_on_relation_level (bool) if true, explanations are generated as history of each relation, rather than per fact (generate_explanations must be set to true for this option to have any effect) (default: false)\n datalog.generate_explanations (bool) produce explanations for produced facts when using the datalog engine (default: false)\n datalog.initial_restart_timeout (unsigned int) length of saturation run before the first restart (in ms), zero means no restarts (default: 0)\n datalog.magic_sets_for_queries (bool) magic set transformation will be used for queries (default: false)\n datalog.output_profile (bool) determines whether profile information should be output when outputting Datalog rules or instructions (default: false)\n datalog.print.tuples (bool) determines whether tuples for output predicates should be output (default: true)\n datalog.profile_timeout_milliseconds (unsigned int) instructions and rules that took less than the threshold will not be printed when printed the instruction/rule list (default: 0)\n datalog.similarity_compressor (bool) rules that differ only in values of constants will be merged into a single rule (default: true)\n datalog.similarity_compressor_threshold (unsigned int) if similarity_compressor is on, this value determines how many similar rules there must be in order for them to be merged (default: 11)\n datalog.subsumption (bool) if true, removes/filters predicates with total transitions (default: true)\n datalog.timeout (unsigned int) Time limit used for saturation (default: 0)\n datalog.unbound_compressor (bool) auxiliary relations will be introduced to avoid unbound variables in rule heads (default: true)\n datalog.use_map_names (bool) use names from map files when displaying tuples (default: true)\n engine (symbol) Select: auto-config, datalog, bmc, spacer (default: auto-config)\n generate_proof_trace (bool) trace for 'sat' answer as proof object (default: false)\n print_aig (symbol) Dump clauses in AIG text format (AAG) to the given file name (default: )\n print_answer (bool) print answer instance(s) to query (default: false)\n print_boogie_certificate (bool) print certificate for reachability or non-reachability using a format understood by Boogie (default: false)\n print_certificate (bool) print certificate for reachability or non-reachability (default: false)\n print_fixedpoint_extensions (bool) use SMT-LIB2 fixedpoint extensions, instead of pure SMT2, when printing rules (default: true)\n print_low_level_smt2 (bool) use (faster) low-level SMT2 printer (the printer is scalable but the result may not be as readable) (default: false)\n print_statistics (bool) print statistics (default: false)\n print_with_variable_declarations (bool) use variable declarations when displaying rules (instead of attempting to use original names) (default: true)\n spacer.arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 2)\n spacer.blast_term_ite_inflation (unsigned int) Maximum inflation for non-Boolean ite-terms expansion: 0 (none), k (multiplicative) (default: 3)\n spacer.ctp (bool) Enable counterexample-to-pushing (default: true)\n spacer.dump_benchmarks (bool) Dump SMT queries as benchmarks (default: false)\n spacer.dump_threshold (double) Threshold in seconds on dumping benchmarks (default: 5.0)\n spacer.elim_aux (bool) Eliminate auxiliary variables in reachability facts (default: true)\n spacer.eq_prop (bool) Enable equality and bound propagation in arithmetic (default: true)\n spacer.expand_bnd (bool) Enable expand-bound lemma generalization (default: false)\n spacer.gg.concretize (bool) Enable global guidance concretize (default: true)\n spacer.gg.conjecture (bool) Enable global guidance conjecture (default: true)\n spacer.gg.subsume (bool) Enable global guidance subsume (default: true)\n spacer.global (bool) Enable global guidance (default: false)\n spacer.gpdr (bool) Use GPDR solving strategy for non-linear CHC (default: false)\n spacer.gpdr.bfs (bool) Use BFS exploration strategy for expanding model search (default: true)\n spacer.ground_pobs (bool) Ground pobs by using values from a model (default: true)\n spacer.iuc (unsigned int) 0 = use old implementation of unsat-core-generation, 1 = use new implementation of IUC generation, 2 = use new implementation of IUC + min-cut optimization (default: 1)\n spacer.iuc.arith (unsigned int) 0 = use simple Farkas plugin, 1 = use simple Farkas plugin with constant from other partition (like old unsat-core-generation),2 = use Gaussian elimination optimization (broken), 3 = use additive IUC plugin (default: 1)\n spacer.iuc.debug_proof (bool) prints proof used by unsat-core-learner for debugging purposes (debugging) (default: false)\n spacer.iuc.old_hyp_reducer (bool) use old hyp reducer instead of new implementation, for debugging only (default: false)\n spacer.iuc.print_farkas_stats (bool) prints for each proof how many Farkas lemmas it contains and how many of these participate in the cut (for debugging) (default: false)\n spacer.iuc.split_farkas_literals (bool) Split Farkas literals (default: false)\n spacer.keep_proxy (bool) keep proxy variables (internal parameter) (default: true)\n spacer.logic (symbol) SMT-LIB logic to configure internal SMT solvers (default: )\n spacer.max_level (unsigned int) Maximum level to explore (default: 4294967295)\n spacer.max_num_contexts (unsigned int) maximal number of contexts to create (default: 500)\n spacer.mbqi (bool) Enable mbqi (default: true)\n spacer.min_level (unsigned int) Minimal level to explore (default: 0)\n spacer.native_mbp (bool) Use native mbp of Z3 (default: true)\n spacer.order_children (unsigned int) SPACER: order of enqueuing children in non-linear rules : 0 (original), 1 (reverse), 2 (random) (default: 0)\n spacer.p3.share_invariants (bool) Share invariants lemmas (default: false)\n spacer.p3.share_lemmas (bool) Share frame lemmas (default: false)\n spacer.propagate (bool) Enable propagate/pushing phase (default: true)\n spacer.push_pob (bool) push blocked pobs to higher level (default: false)\n spacer.push_pob_max_depth (unsigned int) Maximum depth at which push_pob is enabled (default: 4294967295)\n spacer.q3 (bool) Allow quantified lemmas in frames (default: true)\n spacer.q3.instantiate (bool) Instantiate quantified lemmas (default: true)\n spacer.q3.qgen.normalize (bool) normalize cube before quantified generalization (default: true)\n spacer.q3.use_qgen (bool) use quantified lemma generalizer (default: false)\n spacer.random_seed (unsigned int) Random seed to be used by SMT solver (default: 0)\n spacer.reach_dnf (bool) Restrict reachability facts to DNF (default: true)\n spacer.reset_pob_queue (bool) SPACER: reset pob obligation queue when entering a new level (default: true)\n spacer.restart_initial_threshold (unsigned int) Initial threshold for restarts (default: 10)\n spacer.restarts (bool) Enable resetting obligation queue (default: false)\n spacer.simplify_lemmas_post (bool) simplify derived lemmas after inductive propagation (default: false)\n spacer.simplify_lemmas_pre (bool) simplify derived lemmas before inductive propagation (default: false)\n spacer.simplify_pob (bool) simplify pobs by removing redundant constraints (default: false)\n spacer.trace_file (symbol) Log file for progress events (default: )\n spacer.use_array_eq_generalizer (bool) SPACER: attempt to generalize lemmas with array equalities (default: true)\n spacer.use_bg_invs (bool) Enable external background invariants (default: false)\n spacer.use_derivations (bool) SPACER: using derivation mechanism to cache intermediate results for non-linear rules (default: true)\n spacer.use_euf_gen (bool) Generalize lemmas and pobs using implied equalities (default: false)\n spacer.use_inc_clause (bool) Use incremental clause to represent trans (default: true)\n spacer.use_inductive_generalizer (bool) generalize lemmas using induction strengthening (default: true)\n spacer.use_iuc (bool) Enable Interpolating Unsat Core(IUC) for lemma generalization (default: true)\n spacer.use_lemma_as_cti (bool) SPACER: use a lemma instead of a CTI in flexible_trace (default: false)\n spacer.use_lim_num_gen (bool) Enable limit numbers generalizer to get smaller numbers (default: false)\n spacer.validate_lemmas (bool) Validate each lemma after generalization (default: false)\n spacer.weak_abs (bool) Weak abstraction (default: true)\n tab.selection (symbol) selection method for tabular strategy: weight (default), first, var-use (default: weight)\n timeout (unsigned int) (default: infty) timeout in milliseconds. (default: 4294967295)\n validate (bool) validate result (by proof checking or model checking) (default: false)\n xform.array_blast (bool) try to eliminate local array terms using Ackermannization -- some array terms may remain (default: false)\n xform.array_blast_full (bool) eliminate all local array variables by QE (default: false)\n xform.bit_blast (bool) bit-blast bit-vectors (default: false)\n xform.coalesce_rules (bool) coalesce rules (default: false)\n xform.coi (bool) use cone of influence simplification (default: true)\n xform.compress_unbound (bool) compress tails with unbound variables (default: true)\n xform.elim_term_ite (bool) Eliminate term-ite expressions (default: false)\n xform.elim_term_ite.inflation (unsigned int) Maximum inflation for non-Boolean ite-terms blasting: 0 (none), k (multiplicative) (default: 3)\n xform.fix_unbound_vars (bool) fix unbound variables in tail (default: false)\n xform.inline_eager (bool) try eager inlining of rules (default: true)\n xform.inline_linear (bool) try linear inlining method (default: true)\n xform.inline_linear_branch (bool) try linear inlining method with potential expansion (default: false)\n xform.instantiate_arrays (bool) Transforms P(a) into P(i, a[i] a) (default: false)\n xform.instantiate_arrays.enforce (bool) Transforms P(a) into P(i, a[i]), discards a from predicate (default: false)\n xform.instantiate_arrays.nb_quantifier (unsigned int) Gives the number of quantifiers per array (default: 1)\n xform.instantiate_arrays.slice_technique (symbol) => GetId(i) = i, => GetId(i) = true (default: no-slicing)\n xform.instantiate_quantifiers (bool) instantiate quantified Horn clauses using E-matching heuristic (default: false)\n xform.magic (bool) perform symbolic magic set transformation (default: false)\n xform.quantify_arrays (bool) create quantified Horn clauses from clauses with arrays (default: false)\n xform.scale (bool) add scaling variable to linear real arithmetic clauses (default: false)\n xform.slice (bool) simplify clause set using slicing (default: true)\n xform.subsumption_checker (bool) Enable subsumption checker (no support for model conversion) (default: true)\n xform.tail_simplifier_pve (bool) propagate_variable_equivalences (default: true)\n xform.transform_arrays (bool) Rewrites arrays equalities and applies select over store (default: false)\n xform.unfold_rules (unsigned int) unfold rules statically using iterative squaring (default: 0)\n- horn-simplify simplify horn clauses.\n bmc.linear_unrolling_depth (unsigned int) Maximal level to explore (default: 4294967295)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n datalog.all_or_nothing_deltas (bool) compile rules so that it is enough for the delta relation in union and widening operations to determine only whether the updated relation was modified or not (default: false)\n datalog.check_relation (symbol) name of default relation to check. operations on the default relation will be verified using SMT solving (default: null)\n datalog.compile_with_widening (bool) widening will be used to compile recursive rules (default: false)\n datalog.dbg_fpr_nonempty_relation_signature (bool) if true, finite_product_relation will attempt to avoid creating inner relation with empty signature by putting in half of the table columns, if it would have been empty otherwise (default: false)\n datalog.default_relation (symbol) default relation implementation: external_relation, pentagon (default: pentagon)\n datalog.default_table (symbol) default table implementation: sparse, hashtable, bitvector, interval (default: sparse)\n datalog.default_table_checked (bool) if true, the default table will be default_table inside a wrapper that checks that its results are the same as of default_table_checker table (default: false)\n datalog.default_table_checker (symbol) see default_table_checked (default: null)\n datalog.explanations_on_relation_level (bool) if true, explanations are generated as history of each relation, rather than per fact (generate_explanations must be set to true for this option to have any effect) (default: false)\n datalog.generate_explanations (bool) produce explanations for produced facts when using the datalog engine (default: false)\n datalog.initial_restart_timeout (unsigned int) length of saturation run before the first restart (in ms), zero means no restarts (default: 0)\n datalog.magic_sets_for_queries (bool) magic set transformation will be used for queries (default: false)\n datalog.output_profile (bool) determines whether profile information should be output when outputting Datalog rules or instructions (default: false)\n datalog.print.tuples (bool) determines whether tuples for output predicates should be output (default: true)\n datalog.profile_timeout_milliseconds (unsigned int) instructions and rules that took less than the threshold will not be printed when printed the instruction/rule list (default: 0)\n datalog.similarity_compressor (bool) rules that differ only in values of constants will be merged into a single rule (default: true)\n datalog.similarity_compressor_threshold (unsigned int) if similarity_compressor is on, this value determines how many similar rules there must be in order for them to be merged (default: 11)\n datalog.subsumption (bool) if true, removes/filters predicates with total transitions (default: true)\n datalog.timeout (unsigned int) Time limit used for saturation (default: 0)\n datalog.unbound_compressor (bool) auxiliary relations will be introduced to avoid unbound variables in rule heads (default: true)\n datalog.use_map_names (bool) use names from map files when displaying tuples (default: true)\n engine (symbol) Select: auto-config, datalog, bmc, spacer (default: auto-config)\n generate_proof_trace (bool) trace for 'sat' answer as proof object (default: false)\n print_aig (symbol) Dump clauses in AIG text format (AAG) to the given file name (default: )\n print_answer (bool) print answer instance(s) to query (default: false)\n print_boogie_certificate (bool) print certificate for reachability or non-reachability using a format understood by Boogie (default: false)\n print_certificate (bool) print certificate for reachability or non-reachability (default: false)\n print_fixedpoint_extensions (bool) use SMT-LIB2 fixedpoint extensions, instead of pure SMT2, when printing rules (default: true)\n print_low_level_smt2 (bool) use (faster) low-level SMT2 printer (the printer is scalable but the result may not be as readable) (default: false)\n print_statistics (bool) print statistics (default: false)\n print_with_variable_declarations (bool) use variable declarations when displaying rules (instead of attempting to use original names) (default: true)\n spacer.arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 2)\n spacer.blast_term_ite_inflation (unsigned int) Maximum inflation for non-Boolean ite-terms expansion: 0 (none), k (multiplicative) (default: 3)\n spacer.ctp (bool) Enable counterexample-to-pushing (default: true)\n spacer.dump_benchmarks (bool) Dump SMT queries as benchmarks (default: false)\n spacer.dump_threshold (double) Threshold in seconds on dumping benchmarks (default: 5.0)\n spacer.elim_aux (bool) Eliminate auxiliary variables in reachability facts (default: true)\n spacer.eq_prop (bool) Enable equality and bound propagation in arithmetic (default: true)\n spacer.expand_bnd (bool) Enable expand-bound lemma generalization (default: false)\n spacer.gg.concretize (bool) Enable global guidance concretize (default: true)\n spacer.gg.conjecture (bool) Enable global guidance conjecture (default: true)\n spacer.gg.subsume (bool) Enable global guidance subsume (default: true)\n spacer.global (bool) Enable global guidance (default: false)\n spacer.gpdr (bool) Use GPDR solving strategy for non-linear CHC (default: false)\n spacer.gpdr.bfs (bool) Use BFS exploration strategy for expanding model search (default: true)\n spacer.ground_pobs (bool) Ground pobs by using values from a model (default: true)\n spacer.iuc (unsigned int) 0 = use old implementation of unsat-core-generation, 1 = use new implementation of IUC generation, 2 = use new implementation of IUC + min-cut optimization (default: 1)\n spacer.iuc.arith (unsigned int) 0 = use simple Farkas plugin, 1 = use simple Farkas plugin with constant from other partition (like old unsat-core-generation),2 = use Gaussian elimination optimization (broken), 3 = use additive IUC plugin (default: 1)\n spacer.iuc.debug_proof (bool) prints proof used by unsat-core-learner for debugging purposes (debugging) (default: false)\n spacer.iuc.old_hyp_reducer (bool) use old hyp reducer instead of new implementation, for debugging only (default: false)\n spacer.iuc.print_farkas_stats (bool) prints for each proof how many Farkas lemmas it contains and how many of these participate in the cut (for debugging) (default: false)\n spacer.iuc.split_farkas_literals (bool) Split Farkas literals (default: false)\n spacer.keep_proxy (bool) keep proxy variables (internal parameter) (default: true)\n spacer.logic (symbol) SMT-LIB logic to configure internal SMT solvers (default: )\n spacer.max_level (unsigned int) Maximum level to explore (default: 4294967295)\n spacer.max_num_contexts (unsigned int) maximal number of contexts to create (default: 500)\n spacer.mbqi (bool) Enable mbqi (default: true)\n spacer.min_level (unsigned int) Minimal level to explore (default: 0)\n spacer.native_mbp (bool) Use native mbp of Z3 (default: true)\n spacer.order_children (unsigned int) SPACER: order of enqueuing children in non-linear rules : 0 (original), 1 (reverse), 2 (random) (default: 0)\n spacer.p3.share_invariants (bool) Share invariants lemmas (default: false)\n spacer.p3.share_lemmas (bool) Share frame lemmas (default: false)\n spacer.propagate (bool) Enable propagate/pushing phase (default: true)\n spacer.push_pob (bool) push blocked pobs to higher level (default: false)\n spacer.push_pob_max_depth (unsigned int) Maximum depth at which push_pob is enabled (default: 4294967295)\n spacer.q3 (bool) Allow quantified lemmas in frames (default: true)\n spacer.q3.instantiate (bool) Instantiate quantified lemmas (default: true)\n spacer.q3.qgen.normalize (bool) normalize cube before quantified generalization (default: true)\n spacer.q3.use_qgen (bool) use quantified lemma generalizer (default: false)\n spacer.random_seed (unsigned int) Random seed to be used by SMT solver (default: 0)\n spacer.reach_dnf (bool) Restrict reachability facts to DNF (default: true)\n spacer.reset_pob_queue (bool) SPACER: reset pob obligation queue when entering a new level (default: true)\n spacer.restart_initial_threshold (unsigned int) Initial threshold for restarts (default: 10)\n spacer.restarts (bool) Enable resetting obligation queue (default: false)\n spacer.simplify_lemmas_post (bool) simplify derived lemmas after inductive propagation (default: false)\n spacer.simplify_lemmas_pre (bool) simplify derived lemmas before inductive propagation (default: false)\n spacer.simplify_pob (bool) simplify pobs by removing redundant constraints (default: false)\n spacer.trace_file (symbol) Log file for progress events (default: )\n spacer.use_array_eq_generalizer (bool) SPACER: attempt to generalize lemmas with array equalities (default: true)\n spacer.use_bg_invs (bool) Enable external background invariants (default: false)\n spacer.use_derivations (bool) SPACER: using derivation mechanism to cache intermediate results for non-linear rules (default: true)\n spacer.use_euf_gen (bool) Generalize lemmas and pobs using implied equalities (default: false)\n spacer.use_inc_clause (bool) Use incremental clause to represent trans (default: true)\n spacer.use_inductive_generalizer (bool) generalize lemmas using induction strengthening (default: true)\n spacer.use_iuc (bool) Enable Interpolating Unsat Core(IUC) for lemma generalization (default: true)\n spacer.use_lemma_as_cti (bool) SPACER: use a lemma instead of a CTI in flexible_trace (default: false)\n spacer.use_lim_num_gen (bool) Enable limit numbers generalizer to get smaller numbers (default: false)\n spacer.validate_lemmas (bool) Validate each lemma after generalization (default: false)\n spacer.weak_abs (bool) Weak abstraction (default: true)\n tab.selection (symbol) selection method for tabular strategy: weight (default), first, var-use (default: weight)\n timeout (unsigned int) (default: infty) timeout in milliseconds. (default: 4294967295)\n validate (bool) validate result (by proof checking or model checking) (default: false)\n xform.array_blast (bool) try to eliminate local array terms using Ackermannization -- some array terms may remain (default: false)\n xform.array_blast_full (bool) eliminate all local array variables by QE (default: false)\n xform.bit_blast (bool) bit-blast bit-vectors (default: false)\n xform.coalesce_rules (bool) coalesce rules (default: false)\n xform.coi (bool) use cone of influence simplification (default: true)\n xform.compress_unbound (bool) compress tails with unbound variables (default: true)\n xform.elim_term_ite (bool) Eliminate term-ite expressions (default: false)\n xform.elim_term_ite.inflation (unsigned int) Maximum inflation for non-Boolean ite-terms blasting: 0 (none), k (multiplicative) (default: 3)\n xform.fix_unbound_vars (bool) fix unbound variables in tail (default: false)\n xform.inline_eager (bool) try eager inlining of rules (default: true)\n xform.inline_linear (bool) try linear inlining method (default: true)\n xform.inline_linear_branch (bool) try linear inlining method with potential expansion (default: false)\n xform.instantiate_arrays (bool) Transforms P(a) into P(i, a[i] a) (default: false)\n xform.instantiate_arrays.enforce (bool) Transforms P(a) into P(i, a[i]), discards a from predicate (default: false)\n xform.instantiate_arrays.nb_quantifier (unsigned int) Gives the number of quantifiers per array (default: 1)\n xform.instantiate_arrays.slice_technique (symbol) => GetId(i) = i, => GetId(i) = true (default: no-slicing)\n xform.instantiate_quantifiers (bool) instantiate quantified Horn clauses using E-matching heuristic (default: false)\n xform.magic (bool) perform symbolic magic set transformation (default: false)\n xform.quantify_arrays (bool) create quantified Horn clauses from clauses with arrays (default: false)\n xform.scale (bool) add scaling variable to linear real arithmetic clauses (default: false)\n xform.slice (bool) simplify clause set using slicing (default: true)\n xform.subsumption_checker (bool) Enable subsumption checker (no support for model conversion) (default: true)\n xform.tail_simplifier_pve (bool) propagate_variable_equivalences (default: true)\n xform.transform_arrays (bool) Rewrites arrays equalities and applies select over store (default: false)\n xform.unfold_rules (unsigned int) unfold rules statically using iterative squaring (default: 0)\n- nlsat (try to) solve goal using a nonlinear arithmetic solver.\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n max_conflicts (unsigned int) maximum number of conflicts. (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n reorder (bool) reorder variables. (default: true)\n seed (unsigned int) random seed. (default: 0)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qfnra-nlsat builtin strategy for solving QF_NRA problems using only nlsat.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n reorder (bool) reorder variables. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seed (unsigned int) random seed. (default: 0)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n theory_solver (bool) theory solvers. (default: true)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qe-light apply light-weight quantifier elimination.\n- nlqsat apply a NL-QSAT solver.\n- qe apply quantifier elimination.\n eliminate_variables_as_block (bool) (default: true) eliminate variables as a block (true) or one at a time (false)\n qe_nonlinear (bool) (default: false) enable virtual term substitution.\n- qsat apply a QSAT solver.\n- qe2 apply a QSAT based quantifier elimination.\n- qe_rec apply a QSAT based quantifier elimination recursively.\n- psat (try to) solve goal using a parallel SAT solver.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n learned (bool) (default: false) collect also learned clauses.\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- sat (try to) solve goal using a SAT solver.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n learned (bool) (default: false) collect also learned clauses.\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- sat-preprocess Apply SAT solver preprocessing procedures (bounded resolution, Boolean constant propagation, 2-SAT, subsumption, subsumption resolution).\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n learned (bool) (default: false) collect also learned clauses.\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- ctx-solver-simplify apply solver-based contextual simplification rules.\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- psmt builtin strategy for SMT tactic in parallel.\n- unit-subsume-simplify unit subsumption simplification.\n- aig simplify Boolean structure using AIGs.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n- add-bounds add bounds to unbounded variables (under approximation).\n add_bound_lower (rational) (default: -2) lower bound to be added to unbounded variables.\n add_bound_upper (rational) (default: 2) upper bound to be added to unbounded variables.\n- card2bv convert pseudo-boolean constraints to bit-vectors.\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n keep_cardinality_constraints (bool) retain cardinality constraints for solver (default: true)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n- degree-shift try to reduce degree of polynomials (remark: :mul2power simplification is automatically applied).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- diff-neq specialized solver for integer arithmetic problems that contain only atoms of the form (<= k x) (<= x k) and (not (= (- x y) k)), where x and y are constants and k is a numeral, and all constants are bounded.\n diff_neq_max_k (unsigned int) maximum variable upper bound for diff neq solver. (default: 1024)\n- eq2bv convert integer variables used as finite domain elements to bit-vectors.\n- factor polynomial factorization.\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n- fix-dl-var if goal is in the difference logic fragment, then fix the variable with the most number of occurrences at 0.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- fm eliminate variables using fourier-motzkin elimination.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n fm_cutoff1 (unsigned int) first cutoff for FM based on maximum number of lower/upper occurrences. (default: 8)\n fm_cutoff2 (unsigned int) second cutoff for FM based on num_lower * num_upper occurrences. (default: 256)\n fm_extra (unsigned int) max. increase on the number of inequalities for each FM variable elimination step. (default: 0)\n fm_limit (unsigned int) maximum number of constraints, monomials, clauses visited during FM. (default: 5000000)\n fm_occ (bool) consider inequalities occurring in clauses for FM. (default: false)\n fm_real_only (bool) consider only real variables for fourier-motzkin elimination. (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n produce_models (bool) model generation. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- lia2card introduce cardinality constraints from 0-1 integer.\n compile_equality (bool) (default:false) compile equalities into pseudo-Boolean equality\n- lia2pb convert bounded integer variables into a sequence of 0-1 variables.\n lia2pb_max_bits (unsigned int) (default: 32) maximum number of bits to be used (per variable) in lia2pb.\n lia2pb_partial (bool) (default: false) partial lia2pb conversion.\n lia2pb_total_bits (unsigned int) (default: 2048) total number of bits to be used (per problem) in lia2pb.\n- nla2bv convert a nonlinear arithmetic problem into a bit-vector problem, in most cases the resultant goal is an under approximation and is useul for finding models.\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n- normalize-bounds replace a variable x with lower bound k <= x with x' = x - k.\n norm_int_only (bool) normalize only the bounds of integer constants. (default: true)\n produce_models (bool) model generation. (default: false)\n- pb2bv convert pseudo-boolean constraints to bit-vectors.\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n pb2bv_all_clauses_limit (unsigned int) (default: 8) maximum number of literals for using equivalent CNF encoding of PB constraint.\n pb2bv_cardinality_limit (unsigned int) (default: inf) limit for using arc-consistent cardinality constraint encoding.\n- propagate-ineqs propagate ineqs/bounds, remove subsumed inequalities.\n- purify-arith eliminate unnecessary operators: -, /, div, mod, rem, is-int, to-int, ^, root-objects.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n sk_hack (bool) hack for VCC (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- recover-01 recover 0-1 variables hidden as Boolean variables.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n recover_01_max_bits (unsigned int) maximum number of bits to consider in a clause. (default: 10)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- bit-blast reduce bit-vector expressions into SAT.\n blast_add (bool) bit-blast adders. (default: true)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- bv1-blast reduce bit-vector expressions into bit-vectors of size 1 (notes: only equality, extract and concat are supported).\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- bv_bound_chk attempts to detect inconsistencies of bounds on bv expressions.\n- propagate-bv-bounds propagate bit-vector bounds by simplifying implied or contradictory bounds.\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n- propagate-bv-bounds-new propagate bit-vector bounds by simplifying implied or contradictory bounds.\n- reduce-bv-size try to reduce bit-vector sizes using inequalities.\n- bv-slice simplify using bit-vector slices.\n- bvarray2uf Rewrite bit-vector arrays into bit-vector (uninterpreted) functions.\n produce_models (bool) model generation. (default: false)\n- dt2bv eliminate finite domain data-types. Replace by bit-vectors.\n- elim-small-bv eliminate small, quantified bit-vectors by expansion.\n max_bits (unsigned int) (default: 4) maximum bit-vector size of quantified bit-vectors to be eliminated.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- max-bv-sharing use heuristics to maximize the sharing of bit-vector expressions such as adders and multipliers.\n- blast-term-ite blast term if-then-else by hoisting them.\n max_inflation (unsigned int) (default: infinity) multiplicative factor of initial term size. (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- cofactor-term-ite eliminate term if-the-else using cofactors.\n cofactor_equalities (bool) (default: true) use equalities to rewrite bodies of ite-expressions. This is potentially expensive.\n- collect-statistics Collects various statistics.\n- ctx-simplify apply contextual simplification rules.\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n- demodulator extracts equalities from quantifiers and applies them to simplify.\n- der destructive equality resolution.\n- distribute-forall distribute forall over conjunctions.\n- dom-simplify apply dominator simplification rules.\n- elim-term-ite eliminate term if-then-else by adding fresh auxiliary declarations.\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- elim-uncnstr2 eliminate unconstrained variables.\n- elim-uncnstr eliminate application containing unconstrained variables.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) (default: infty) maximum number of steps. (default: 4294967295)\n- elim-predicates eliminate predicates.\n- euf-completion simplify using equalities.\n- injectivity Identifies and applies injectivity axioms.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n produce_models (bool) model generation. (default: false)\n- snf put goal in skolem normal form.\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n sk_hack (bool) hack for VCC (default: false)\n- nnf put goal in negation normal form.\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n sk_hack (bool) hack for VCC (default: false)\n- occf put goal in one constraint per clause normal form (notes: fails if proof generation is enabled; only clauses are considered).\n- pb-preprocess pre-process pseudo-Boolean constraints a la Davis Putnam.\n- propagate-values2 propagate constants.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- propagate-values propagate constants.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- reduce-args reduce the number of arguments of function applications, when for all occurrences of a function f the i-th is a value.\n- simplify apply simplification rules.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- elim-and convert (and a b) into (not (or (not a) (not b))).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- solve-eqs solve for variables.\n context_solve (bool) solve equalities under disjunctions. (default: false)\n ite_solver (bool) use if-then-else solver. (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n theory_solver (bool) theory solvers. (default: true)\n- special-relations detect and replace by special relations.\n- split-clause split a clause in many subgoals.\n split_largest_clause (bool) (default: false) split the largest clause in the goal.\n- symmetry-reduce apply symmetry reduction.\n- tseitin-cnf convert goal into CNF using tseitin-like encoding (note: quantifiers are ignored).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n- tseitin-cnf-core convert goal into CNF using tseitin-like encoding (note: quantifiers are ignored). This tactic does not apply required simplifications to the input goal like the tseitin-cnf tactic.\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n- qffd builtin strategy for solving QF_FD problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n axioms2files (bool) print negated theory axioms to separate files during search (default: false)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cancel_backup_file (symbol) file to save partial search state if search is canceled (default: )\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n compact (bool) try to compact function graph (i.e., function interpretations that are lookup tables) (default: true)\n completion (bool) enable/disable model completion (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inline_def (bool) inline local function definitions ignoring possible expansion (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n instantiations2console (bool) print quantifier instantiations to the console (default: false)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n lemmas2console (bool) print lemmas during search (default: false)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n partial (bool) enable/disable partial function interpretations (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n proof.check (bool) check proof logs (default: true)\n proof.log (symbol) log clause proof trail into a file (default: )\n proof.save (bool) save proof log into a proof object that can be extracted using (get-proof) (default: false)\n proof.trim (bool) trim and save proof into a proof object that an be extracted using (get-proof) (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rlimit (unsigned int) default resource limit used for solvers. Unrestricted when set to 0. (default: 0)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n smtlib2_log (symbol) file to save solver interaction (default: )\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n timeout (unsigned int) timeout on the solver object; overwrites a global timeout (default: 4294967295)\n user_functions (bool) include user defined functions in model (default: true)\n v1 (bool) use Z3 version 1.x pretty printer (default: false)\n v2 (bool) use Z3 version 2.x (x <= 16) pretty printer (default: false)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- pqffd builtin strategy for solving QF_FD problems in parallel.\n- smtfd builtin strategy for solving SMT problems by reduction to FD.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n axioms2files (bool) print negated theory axioms to separate files during search (default: false)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n cancel_backup_file (symbol) file to save partial search state if search is canceled (default: )\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n cce (bool) eliminate covered clauses (default: false)\n compact (bool) try to compact function graph (i.e., function interpretations that are lookup tables) (default: true)\n completion (bool) enable/disable model completion (default: false)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n inline_def (bool) inline local function definitions ignoring possible expansion (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n instantiations2console (bool) print quantifier instantiations to the console (default: false)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n lemmas2console (bool) print lemmas during search (default: false)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n max_lemmas (unsigned int) maximal number of lemmas per round (default: 10)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n partial (bool) enable/disable partial function interpretations (default: false)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n proof.check (bool) check proof logs (default: true)\n proof.log (symbol) log clause proof trail into a file (default: )\n proof.save (bool) save proof log into a proof object that can be extracted using (get-proof) (default: false)\n proof.trim (bool) trim and save proof into a proof object that an be extracted using (get-proof) (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rlimit (unsigned int) default resource limit used for solvers. Unrestricted when set to 0. (default: 0)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n smtlib2_log (symbol) file to save solver interaction (default: )\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n threads (unsigned int) number of parallel threads to use (default: 1)\n timeout (unsigned int) timeout on the solver object; overwrites a global timeout (default: 4294967295)\n user_functions (bool) include user defined functions in model (default: true)\n v1 (bool) use Z3 version 1.x pretty printer (default: false)\n v2 (bool) use Z3 version 2.x (x <= 16) pretty printer (default: false)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- fpa2bv convert floating point numbers to bit-vectors.\n- qffp (try to) solve goal using the tactic for QF_FP.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qffpbv (try to) solve goal using the tactic for QF_FPBV (floats+bit-vectors).\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qffplra (try to) solve goal using the tactic for QF_FPLRA.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- default default strategy used when no logic is specified.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n add_bound_lower (rational) (default: -2) lower bound to be added to unbounded variables.\n add_bound_upper (rational) (default: 2) upper bound to be added to unbounded variables.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n axioms2files (bool) print negated theory axioms to separate files during search (default: false)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n cancel_backup_file (symbol) file to save partial search state if search is canceled (default: )\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n cofactor_equalities (bool) (default: true) use equalities to rewrite bodies of ite-expressions. This is potentially expensive.\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n compact (bool) try to compact function graph (i.e., function interpretations that are lookup tables) (default: true)\n compile_equality (bool) (default:false) compile equalities into pseudo-Boolean equality\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n completion (bool) enable/disable model completion (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n ctrl_c (bool) enable interrupts from ctrl-c (default: true)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_def (bool) inline local function definitions ignoring possible expansion (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n instantiations2console (bool) print quantifier instantiations to the console (default: false)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n lemmas2console (bool) print lemmas during search (default: false)\n lia2pb_max_bits (unsigned int) (default: 32) maximum number of bits to be used (per variable) in lia2pb.\n lia2pb_partial (bool) (default: false) partial lia2pb conversion.\n lia2pb_total_bits (unsigned int) (default: 2048) total number of bits to be used (per problem) in lia2pb.\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n norm_int_only (bool) normalize only the bounds of integer constants. (default: true)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n partial (bool) enable/disable partial function interpretations (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n pb2bv_all_clauses_limit (unsigned int) (default: 8) maximum number of literals for using equivalent CNF encoding of PB constraint.\n pb2bv_cardinality_limit (unsigned int) (default: inf) limit for using arc-consistent cardinality constraint encoding.\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n produce_models (bool) model generation. (default: false)\n proof.check (bool) check proof logs (default: true)\n proof.log (symbol) log clause proof trail into a file (default: )\n proof.save (bool) save proof log into a proof object that can be extracted using (get-proof) (default: false)\n proof.trim (bool) trim and save proof into a proof object that an be extracted using (get-proof) (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n rlimit (unsigned int) default resource limit used for solvers. Unrestricted when set to 0. (default: 0)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n smtlib2_log (symbol) file to save solver interaction (default: )\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) number of parallel threads to use (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n timeout (unsigned int) timeout on the solver object; overwrites a global timeout (default: 4294967295)\n user_functions (bool) include user defined functions in model (default: true)\n v1 (bool) use Z3 version 1.x pretty printer (default: false)\n v2 (bool) use Z3 version 2.x (x <= 16) pretty printer (default: false)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- solver-subsumption remove assertions that are subsumed.\n max_conflicts (unsigned int) (default: 2) maximal number of conflicts allowed per solver call.\n- qfbv-sls (try to) solve using stochastic local search for QF_BV.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n early_prune (bool) use early pruning for score prediction (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_restarts (unsigned int) maximum number of restarts (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n paws_init (unsigned int) initial/minimum assertion weights (default: 40)\n paws_sp (unsigned int) smooth assertion weights with probability paws_sp / 1024 (default: 52)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n random_offset (bool) use random offset for candidate evaluation (default: true)\n random_seed (unsigned int) random seed (default: 0)\n rescore (bool) rescore/normalize top-level score every base restart interval (default: true)\n restart_base (unsigned int) base restart interval given by moves per run (default: 100)\n restart_init (bool) initialize to 0 or random value (= 1) after restart (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scale_unsat (double) scale score of unsat expressions by this factor (default: 0.5)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n theory_solver (bool) theory solvers. (default: true)\n track_unsat (bool) keep a list of unsat assertions as done in SAT - currently disabled internally (default: false)\n vns_mc (unsigned int) in local minima, try Monte Carlo sampling vns_mc many 2-bit-flips per bit (default: 0)\n vns_repick (bool) in local minima, try picking a different assertion (only for walksat) (default: false)\n walksat (bool) use walksat assertion selection (instead of gsat) (default: true)\n walksat_repick (bool) repick assertion if randomizing in local minima (default: true)\n walksat_ucb (bool) use bandit heuristic for walksat assertion selection (instead of random) (default: true)\n walksat_ucb_constant (double) the ucb constant c in the term score + c * f(touched) (default: 20.0)\n walksat_ucb_forget (double) scale touched by this factor every base restart interval (default: 1.0)\n walksat_ucb_init (bool) initialize total ucb touched to formula size (default: false)\n walksat_ucb_noise (double) add noise 0 <= 256 * ucb_noise to ucb score for assertion selection (default: 0.0002)\n wp (unsigned int) random walk with probability wp / 1024 (default: 100)\n- nra builtin strategy for solving NRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qfaufbv builtin strategy for solving QF_AUFBV problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qfauflia builtin strategy for solving QF_AUFLIA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- qfbv builtin strategy for solving QF_BV problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qfidl builtin strategy for solving QF_IDL problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n diff_neq_max_k (unsigned int) maximum variable upper bound for diff neq solver. (default: 1024)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n lia2pb_max_bits (unsigned int) (default: 32) maximum number of bits to be used (per variable) in lia2pb.\n lia2pb_partial (bool) (default: false) partial lia2pb conversion.\n lia2pb_total_bits (unsigned int) (default: 2048) total number of bits to be used (per problem) in lia2pb.\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n norm_int_only (bool) normalize only the bounds of integer constants. (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n pb2bv_all_clauses_limit (unsigned int) (default: 8) maximum number of literals for using equivalent CNF encoding of PB constraint.\n pb2bv_cardinality_limit (unsigned int) (default: inf) limit for using arc-consistent cardinality constraint encoding.\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n produce_models (bool) model generation. (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) number of parallel threads to use (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qflia builtin strategy for solving QF_LIA problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n add_bound_lower (rational) (default: -2) lower bound to be added to unbounded variables.\n add_bound_upper (rational) (default: 2) upper bound to be added to unbounded variables.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver (default: false)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n lia2pb_max_bits (unsigned int) (default: 32) maximum number of bits to be used (per variable) in lia2pb.\n lia2pb_partial (bool) (default: false) partial lia2pb conversion.\n lia2pb_total_bits (unsigned int) (default: 2048) total number of bits to be used (per problem) in lia2pb.\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n norm_int_only (bool) normalize only the bounds of integer constants. (default: true)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n pb2bv_all_clauses_limit (unsigned int) (default: 8) maximum number of literals for using equivalent CNF encoding of PB constraint.\n pb2bv_cardinality_limit (unsigned int) (default: inf) limit for using arc-consistent cardinality constraint encoding.\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n produce_models (bool) model generation. (default: false)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qflra builtin strategy for solving QF_LRA problems.\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n induction (bool) enable generation of induction lemmas (default: false)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- qfnia builtin strategy for solving QF_NIA problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for cardinality constraints: grouped, bimander, ordered, unate, circuit (default: none)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n cofactor_equalities (bool) (default: true) use equalities to rewrite bodies of ite-expressions. This is potentially expensive.\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n compile_equality (bool) (default:false) compile equalities into pseudo-Boolean equality\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize computed core (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n keep_cardinality_constraints (bool) retain cardinality constraints for solver (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) encoding used for Pseudo-Boolean constraints: totalizer, sorting, binary_merge, bv, solver. PB constraints are retained if set to 'solver' (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) number of parallel threads to use (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qfnra builtin strategy for solving QF_NRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n check_lemmas (bool) check lemmas on the fly using an independent nlsat solver (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n common_patterns (bool) minimize the number of auxiliary variables during CNF encoding by identifing commonly used patterns (default: true)\n complete (bool) add constraints to make sure that any interpretation of a underspecified arithmetic operators is a function. The result will include additional uninterpreted functions/constants: /0, div0, mod0, 0^0, neg-root (default: true)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n distributivity (bool) minimize the number of auxiliary variables during CNF encoding by applying distributivity over unshared subformulas (default: true)\n distributivity_blowup (unsigned int) maximum overhead for applying distributivity during CNF encoding (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_inverses (bool) eliminate inverse trigonometric functions (asin, acos, atan). (default: true)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_root_objects (bool) eliminate root objects. (default: true)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n factor (bool) (default: true) factor polynomials.\n factor_max_prime (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step (default: 31)\n factor_num_primes (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching (default: 1)\n factor_search_size (unsigned int) parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space (default: 5000)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inline_vars (bool) inline variables that can be isolated from equations (not supported in incremental mode) (default: false)\n ite_chaing (bool) minimize the number of auxiliary variables during CNF encoding by identifing if-then-else chains (default: true)\n ite_extra (bool) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lazy (unsigned int) how lazy the solver is. (default: 0)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n log_lemmas (bool) display lemmas as self-contained SMT formulas (default: false)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_args (unsigned int) (default: 128) maximum number of arguments (per application) that will be considered by the greedy (quadratic) heuristic.\n max_conflicts (unsigned int) maximum number of conflicts. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_prime (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step.\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_search_size (unsigned int) (default: infty) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space.\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n min_mag (unsigned int) Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16 (default: 16)\n minimize_conflicts (bool) minimize conflicts (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n nla2bv_bv_size (unsigned int) default bit-vector size used by nla2bv tactic. (default: 4)\n nla2bv_divisor (unsigned int) nla2bv tactic parameter. (default: 2)\n nla2bv_max_bv_size (unsigned int) (default: inf) maximum bit-vector size used by nla2bv tactic\n nla2bv_root (unsigned int) nla2bv tactic encodes reals into bit-vectors using expressions of the form a+b*sqrt(c), this parameter sets the value of c used in the encoding. (default: 2)\n num_primes (unsigned int) (default: 1) Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching.\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n randomize (bool) randomize selection of a witness in nlsat. (default: true)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder (bool) reorder variables. (default: true)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seed (unsigned int) random seed. (default: 0)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n shuffle_vars (bool) use a random variable order. (default: false)\n simplify_conflicts (bool) simplify conflicts using equalities before resolving them in nlsat solver. (default: true)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n split_factors (bool) apply simplifications such as (= (* p1 p2) 0) --\x3e (or (= p1 0) (= p2 0)). (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n zero_accuracy (unsigned int) one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k) (default: 0)\n- qfuf builtin strategy for solving QF_UF problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- qfufbv builtin strategy for solving QF_UFBV problems.\n abce (bool) eliminate blocked clauses using asymmetric literals (default: false)\n acce (bool) eliminate covered clauses using asymmetric added literals (default: false)\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n anf (bool) enable ANF based simplification in-processing (default: false)\n anf.delay (unsigned int) delay ANF simplification by in-processing round (default: 2)\n anf.exlin (bool) enable extended linear simplification (default: false)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n asymm_branch (bool) asymmetric branching (default: true)\n asymm_branch.all (bool) asymmetric branching on all literals per clause (default: false)\n asymm_branch.delay (unsigned int) number of simplification rounds to wait until invoking asymmetric branch simplification (default: 1)\n asymm_branch.limit (unsigned int) approx. maximum number of literals visited during asymmetric branching (default: 100000000)\n asymm_branch.rounds (unsigned int) maximal number of rounds to run asymmetric branch simplifications if progress is made (default: 2)\n asymm_branch.sampled (bool) use sampling based asymmetric branching based on binary implication graph (default: true)\n ate (bool) asymmetric tautology elimination (default: true)\n auto_config (bool) automatically configure solver (default: true)\n backtrack.conflicts (unsigned int) number of conflicts before enabling chronological backtracking (default: 4000)\n backtrack.scopes (unsigned int) number of scopes to enable chronological backtracking (default: 100)\n bca (bool) blocked clause addition - add blocked binary clauses (default: false)\n bce (bool) eliminate blocked clauses (default: false)\n bce_at (unsigned int) eliminate blocked clauses only once at the given simplification round (default: 2)\n bce_delay (unsigned int) delay eliminate blocked clauses until simplification round (default: 2)\n binspr (bool) enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_add (bool) bit-blast adders. (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_full (bool) bit-blast any term with bit-vector sort, this option will make E-matching ineffective in any pattern containing bit-vector terms. (default: false)\n blast_mul (bool) bit-blast multipliers (and dividers, remainders). (default: true)\n blast_quant (bool) bit-blast quantified variables. (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n blocked_clause_limit (unsigned int) maximum number of literals visited during blocked clause elimination (default: 100000000)\n branching.anti_exploration (bool) apply anti-exploration heuristic for branch selection (default: false)\n branching.heuristic (symbol) branching heuristic vsids, chb (default: vsids)\n burst_search (unsigned int) number of conflicts before first global simplification (default: 100)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n cardinality.encoding (symbol) encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit (default: grouped)\n cardinality.solver (bool) use cardinality solver (default: true)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n cce (bool) eliminate covered clauses (default: false)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.minimize_partial (bool) apply partial (cheap) core minimization (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n cut (bool) enable AIG based simplification in-processing (default: false)\n cut.aig (bool) extract aigs (and ites) from cluases for cut simplification (default: false)\n cut.delay (unsigned int) delay cut simplification by in-processing round (default: 2)\n cut.dont_cares (bool) integrate dont cares with cuts (default: true)\n cut.force (bool) force redoing cut-enumeration until a fixed-point (default: false)\n cut.lut (bool) extract luts from clauses for cut simplification (default: false)\n cut.npn3 (bool) extract 3 input functions from clauses for cut simplification (default: false)\n cut.redundancies (bool) integrate redundancy checking of cuts (default: true)\n cut.xor (bool) extract xors from clauses for cut simplification (default: false)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n ddfw.init_clause_weight (unsigned int) initial clause weight for DDFW local search (default: 8)\n ddfw.reinit_base (unsigned int) increment basis for geometric backoff scheme of re-initialization of weights (default: 10000)\n ddfw.restart_base (unsigned int) number of flips used a starting point for hessitant restart backoff (default: 100000)\n ddfw.threads (unsigned int) number of ddfw threads to run in parallel with sat solver (default: 0)\n ddfw.use_reward_pct (unsigned int) percentage to pick highest reward variable when it has reward 0 (default: 15)\n ddfw_search (bool) use ddfw local search instead of CDCL (default: false)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dimacs.core (bool) extract core from DIMACS benchmarks (default: false)\n div0_ackermann_limit (unsigned int) a bound for number of congruence Ackermann lemmas for div0 modelling (default: 1000)\n drat.activity (bool) dump variable activities (default: false)\n drat.binary (bool) use Binary DRAT output format (default: false)\n drat.check_sat (bool) build up internal trace, check satisfying model (default: false)\n drat.check_unsat (bool) build up internal proof and check (default: false)\n drat.disable (bool) override anything that enables DRAT (default: false)\n drat.file (symbol) file to dump DRAT proofs (default: )\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n dyn_sub_res (bool) dynamic subsumption resolution for minimizing learned clauses (default: true)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n elim_vars (bool) enable variable elimination using resolution during simplification (default: true)\n elim_vars_bdd (bool) enable variable elimination using BDD recompilation during simplification (default: true)\n elim_vars_bdd_delay (unsigned int) delay elimination of variables using BDDs until after simplification round (default: 3)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n enable_pre_simplify (bool) enable pre simplifications before the bounded search (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n euf (bool) enable euf solver (this feature is preliminary and not ready for general consumption) (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n force_cleanup (bool) force cleanup to remove tautologies and simplify clauses (default: false)\n gc (symbol) garbage collection strategy: psm, glue, glue_psm, dyn_psm (default: glue_psm)\n gc.burst (bool) perform eager garbage collection during initialization (default: false)\n gc.defrag (bool) defragment clauses when garbage collecting (default: true)\n gc.increment (unsigned int) increment to the garbage collection threshold (default: 500)\n gc.initial (unsigned int) learned clauses garbage collection frequency (default: 20000)\n gc.k (unsigned int) learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm) (default: 7)\n gc.small_lbd (unsigned int) learned clauses with small LBD are never deleted (only used in dyn_psm) (default: 3)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n inprocess.max (unsigned int) maximal number of inprocessing passes (default: 4294967295)\n inprocess.out (symbol) file to dump result of the first inprocessing step and exit (default: )\n ite_extra (bool) (default: true) add redundant clauses (that improve unit propagation) when encoding if-then-else formulas\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n learned (bool) (default: false) collect also learned clauses.\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n local_search (bool) use local search instead of CDCL (default: false)\n local_search_dbg_flips (bool) write debug information for number of flips (default: false)\n local_search_mode (symbol) local search algorithm, either default wsat or qsat (default: wsat)\n local_search_threads (unsigned int) number of local search threads to find satisfiable solution (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n lookahead.cube.cutoff (symbol) cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat (default: depth)\n lookahead.cube.depth (unsigned int) cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth. (default: 1)\n lookahead.cube.fraction (double) adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat (default: 0.4)\n lookahead.cube.freevars (double) cube free variable fraction. Used when lookahead.cube.cutoff is freevars (default: 0.8)\n lookahead.cube.psat.clause_base (double) clause base for PSAT cutoff (default: 2)\n lookahead.cube.psat.trigger (double) trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat (default: 5)\n lookahead.cube.psat.var_exp (double) free variable exponent for PSAT cutoff (default: 1)\n lookahead.delta_fraction (double) number between 0 and 1, the smaller the more literals are selected for double lookahead (default: 1.0)\n lookahead.double (bool) enable doubld lookahead (default: true)\n lookahead.global_autarky (bool) prefer to branch on variables that occur in clauses that are reduced (default: false)\n lookahead.preselect (bool) use pre-selection of subset of variables for branching (default: false)\n lookahead.reward (symbol) select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu (default: march_cu)\n lookahead.use_learned (bool) use learned clauses when selecting lookahead literal (default: false)\n lookahead_scores (bool) extract lookahead scores. A utility that can only be used from the DIMACS front-end (default: false)\n lookahead_simplify (bool) use lookahead solver during simplification (default: false)\n lookahead_simplify.bca (bool) add learned binary clauses as part of lookahead simplification (default: true)\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n minimize_lemmas (bool) minimize learned clauses (default: true)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n override_incremental (bool) override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n pb.lemma_format (symbol) generate either cardinality or pb lemmas (default: cardinality)\n pb.min_arity (unsigned int) minimal arity to compile pb/cardinality constraints to CNF (default: 9)\n pb.resolve (symbol) resolution strategy for boolean algebra solver: cardinality, rounding (default: cardinality)\n pb.solver (symbol) method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver) (default: solver)\n phase (symbol) phase selection strategy: always_false, always_true, basic_caching, random, caching (default: caching)\n phase.sticky (bool) use sticky phase caching (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n prob_search (bool) use probsat local search instead of CDCL (default: false)\n probing (bool) apply failed literal detection during simplification (default: true)\n probing_binary (bool) probe binary clauses (default: true)\n probing_cache (bool) add binary literals as lemmas (default: true)\n probing_cache_limit (unsigned int) cache binaries unless overall memory usage exceeds cache limit (default: 1024)\n probing_limit (unsigned int) limit to the number of probe calls (default: 5000000)\n propagate.prefetch (bool) prefetch watch lists for assigned literals (default: true)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_freq (double) frequency of random case splits (default: 0.01)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n reorder.activity_scale (unsigned int) scaling factor for activity update (default: 100)\n reorder.base (unsigned int) number of conflicts per random reorder (default: 4294967295)\n reorder.itau (double) inverse temperature for softmax (default: 4.0)\n rephase.base (unsigned int) number of conflicts per rephase (default: 1000)\n resolution.cls_cutoff1 (unsigned int) limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 100000000)\n resolution.cls_cutoff2 (unsigned int) limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination (default: 700000000)\n resolution.limit (unsigned int) approx. maximum number of literals visited during variable elimination (default: 500000000)\n resolution.lit_cutoff_range1 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 700)\n resolution.lit_cutoff_range2 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 400)\n resolution.lit_cutoff_range3 (unsigned int) second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 300)\n resolution.occ_cutoff (unsigned int) first cutoff (on number of positive/negative occurrences) for Boolean variable elimination (default: 10)\n resolution.occ_cutoff_range1 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses (default: 8)\n resolution.occ_cutoff_range2 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2 (default: 5)\n resolution.occ_cutoff_range3 (unsigned int) second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2 (default: 3)\n restart (symbol) restart strategy: static, luby, ema or geometric (default: ema)\n restart.emafastglue (double) ema alpha factor for fast moving average (default: 0.03)\n restart.emaslowglue (double) ema alpha factor for slow moving average (default: 1e-05)\n restart.factor (double) restart increment factor for geometric strategy (default: 1.5)\n restart.fast (bool) use fast restart approach only removing less active literals. (default: true)\n restart.initial (unsigned int) initial restart (number of conflicts) (default: 2)\n restart.margin (double) margin between fast and slow restart factors. For ema (default: 1.1)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n retain_blocked_clauses (bool) retain blocked clauses as lemmas (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n scc (bool) eliminate Boolean variables by computing strongly connected components (default: true)\n scc.tr (bool) apply transitive reduction, eliminate redundant binary clauses (default: true)\n search.sat.conflicts (unsigned int) period for solving for sat (in number of conflicts) (default: 400)\n search.unsat.conflicts (unsigned int) period for solving for unsat (in number of conflicts) (default: 400)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n simplify.delay (unsigned int) set initial delay of simplification by a conflict count (default: 0)\n smt (bool) use the SAT solver based incremental SMT core (default: false)\n smt.proof.check (bool) check SMT proof while it is created (default: false)\n smt.proof.check_rup (bool) apply forward RUP proof checking (default: true)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n subsumption (bool) eliminate subsumed clauses (default: true)\n subsumption.limit (unsigned int) approx. maximum number of literals visited during subsumption (and subsumption resolution) (default: 100000000)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n variable_decay (unsigned int) multiplier (divided by 100) for the VSIDS activity increment (default: 110)\n- qfufbv_ackr A tactic for solving QF_UFBV based on Ackermannization.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- ufnia builtin strategy for solving UFNIA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- uflra builtin strategy for solving UFLRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- auflia builtin strategy for solving AUFLIA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- auflira builtin strategy for solving AUFLIRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- aufnira builtin strategy for solving AUFNIRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- lra builtin strategy for solving LRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- lia builtin strategy for solving LIA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- lira builtin strategy for solving LIRA problems.\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_depth (unsigned int) maximum term depth. (default: 1024)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_eq (bool) enable equality propagation from bounds. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- smt apply a SAT based SMT solver.\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n induction (bool) enable generation of induction lemmas (default: false)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- skip do nothing tactic.\n- fail always fail tactic.\n- fail-if-undecided fail if goal is undecided.\n- macro-finder Identifies and applies macros.\n elim_and (bool) (default: false) eliminate conjunctions during (internal) calls to the simplifier.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n- quasi-macros Identifies and applies quasi-macros.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n- ufbv-rewriter Applies UFBV-specific rewriting rules, mainly demodulation.\n max_memory (unsigned int) (default: infty) maximum amount of memory in megabytes. (default: 4294967295)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n- bv builtin strategy for solving BV problems (with quantifiers).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\n- ufbv builtin strategy for solving UFBV problems (with quantifiers).\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith.auto_config_simplex (bool) force simplex solver in auto_config (default: false)\n arith.bprop_on_pivoted_rows (bool) propagate bounds on rows changed by the pivot operation (default: true)\n arith.branch_cut_ratio (unsigned int) branch/cut ratio for linear integer arithmetic (default: 2)\n arith.dump_lemmas (bool) dump arithmetic theory lemmas to files (default: false)\n arith.eager_eq_axioms (bool) eager equality axioms (default: true)\n arith.enable_hnf (bool) enable hnf (Hermite Normal Form) cuts (default: true)\n arith.greatest_error_pivot (bool) Pivoting strategy (default: false)\n arith.ignore_int (bool) treat integer variables as real (default: false)\n arith.int_eq_branch (bool) branching using derived integer equations (default: false)\n arith.min (bool) minimize cost (default: false)\n arith.nl (bool) (incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.branching (bool) branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2 (default: true)\n arith.nl.delay (unsigned int) number of calls to final check before invoking bounded nlsat check (default: 500)\n arith.nl.expp (bool) expensive patching (default: false)\n arith.nl.gr_q (unsigned int) grobner's quota (default: 10)\n arith.nl.grobner (bool) run grobner's basis heuristic (default: true)\n arith.nl.grobner_cnfl_to_report (unsigned int) grobner's maximum number of conflicts to report (default: 1)\n arith.nl.grobner_eqs_growth (unsigned int) grobner's number of equalities growth (default: 10)\n arith.nl.grobner_expr_degree_growth (unsigned int) grobner's maximum expr degree growth (default: 2)\n arith.nl.grobner_expr_size_growth (unsigned int) grobner's maximum expr size growth (default: 2)\n arith.nl.grobner_frequency (unsigned int) grobner's call frequency (default: 4)\n arith.nl.grobner_max_simplified (unsigned int) grobner's maximum number of simplifications (default: 10000)\n arith.nl.grobner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 1)\n arith.nl.horner (bool) run horner's heuristic (default: true)\n arith.nl.horner_frequency (unsigned int) horner's call frequency (default: 4)\n arith.nl.horner_row_length_limit (unsigned int) row is disregarded by the heuristic if its length is longer than the value (default: 10)\n arith.nl.horner_subs_fixed (unsigned int) 0 - no subs, 1 - substitute, 2 - substitute fixed zeros only (default: 2)\n arith.nl.nra (bool) call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6 (default: true)\n arith.nl.order (bool) run order lemmas (default: true)\n arith.nl.rounds (unsigned int) threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2 (default: 1024)\n arith.nl.tangents (bool) run tangent lemmas (default: true)\n arith.print_ext_var_names (bool) print external variable names (default: false)\n arith.print_stats (bool) print statistic (default: false)\n arith.propagate_eqs (bool) propagate (cheap) equalities (default: true)\n arith.propagation_mode (unsigned int) 0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds (default: 1)\n arith.random_initial_value (bool) use random initial values in the simplex-based procedure for linear arithmetic (default: false)\n arith.rep_freq (unsigned int) the report frequency, in how many iterations print the cost and other info (default: 0)\n arith.simplex_strategy (unsigned int) simplex strategy for the solver (default: 0)\n arith.solver (unsigned int) arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver (default: 6)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n array.extensional (bool) extensional array theory (default: true)\n array.weak (bool) weak array theory (default: false)\n auto_config (bool) automatically configure solver (default: true)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv.delay (bool) delay internalize expensive bit-vector operations (default: false)\n bv.enable_int2bv (bool) enable support for int2bv and bv2int operators (default: true)\n bv.eq_axioms (bool) enable redundant equality axioms for bit-vectors (default: true)\n bv.reflect (bool) create enode for every bit-vector term (default: true)\n bv.size_reduce (bool) pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant (default: false)\n bv.watch_diseq (bool) use watch lists instead of eager axioms for bit-vectors (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n candidate_models (bool) create candidate models even when quantifier or theory reasoning is incomplete (default: false)\n case_split (unsigned int) 0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity (default: 1)\n clause_proof (bool) record a clausal proof (default: false)\n context_solve (bool) solve equalities under disjunctions. (default: false)\n core.extend_nonlocal_patterns (bool) extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body (default: false)\n core.extend_patterns (bool) extend unsat core with literals that trigger (potential) quantifier instances (default: false)\n core.extend_patterns.max_distance (unsigned int) limits the distance of a pattern-extended unsat core (default: 4294967295)\n core.minimize (bool) minimize unsat core produced by SMT context (default: false)\n core.validate (bool) [internal] validate unsat core produced by SMT context. This option is intended for debugging (default: false)\n cube_depth (unsigned int) cube depth. (default: 1)\n dack (unsigned int) 0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution (default: 1)\n dack.eq (bool) enable dynamic ackermannization for transtivity of equalities (default: false)\n dack.factor (double) number of instance per conflict (default: 0.1)\n dack.gc (unsigned int) Dynamic ackermannization garbage collection frequency (per conflict) (default: 2000)\n dack.gc_inv_decay (double) Dynamic ackermannization garbage collection decay (default: 0.8)\n dack.threshold (unsigned int) number of times the congruence rule must be used before Leibniz's axiom is expanded (default: 10)\n delay_units (bool) if true then z3 will not restart when a unit clause is learned (default: false)\n delay_units_threshold (unsigned int) maximum number of learned unit clauses before restarting, ignored if delay_units is false (default: 32)\n dt_lazy_splits (unsigned int) How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy (default: 1)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n elim_unconstrained (bool) pre-processing: eliminate unconstrained subterms (default: true)\n ematching (bool) E-Matching based quantifier instantiation (default: true)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n fail_if_inconclusive (bool) (default: true) fail if found unsat (sat) for under (over) approximated goal.\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_labels (bool) remove/ignore labels in the input formula, this option is ignored if proofs are enabled (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n induction (bool) enable generation of induction lemmas (default: false)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n ite_solver (bool) use if-then-else solver. (default: true)\n lemma_gc_strategy (unsigned int) lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none (default: 0)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n logic (symbol) logic used to setup the SMT solver (default: )\n macro_finder (bool) try to find universally quantified formulas that can be viewed as macros (default: false)\n max_conflicts (unsigned int) maximum number of conflicts before giving up. (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_rounds (unsigned int) maximum number of rounds. (default: 4)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mbqi (bool) model based quantifier instantiation (MBQI) (default: true)\n mbqi.force_template (unsigned int) some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight >= mbqi.force_template are forced to be used as a template (default: 10)\n mbqi.id (string) Only use model-based instantiation for quantifiers with id's beginning with string (default: )\n mbqi.max_cexs (unsigned int) initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation (default: 1)\n mbqi.max_cexs_incr (unsigned int) increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI (default: 0)\n mbqi.max_iterations (unsigned int) maximum number of rounds of MBQI (default: 1000)\n mbqi.trace (bool) generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied (default: false)\n mode (symbol) NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full (default: skolem)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n pb.conflict_frequency (unsigned int) conflict frequency for Pseudo-Boolean theory (default: 1000)\n pb.learn_complements (bool) learn complement literals for Pseudo-Boolean theory (default: true)\n phase_caching_off (unsigned int) number of conflicts while phase caching is off (default: 100)\n phase_caching_on (unsigned int) number of conflicts while phase caching is on (default: 400)\n phase_selection (unsigned int) phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory (default: 3)\n produce_models (bool) model generation. (default: false)\n produce_proofs (bool) proof generation. (default: false)\n propagate_values (bool) pre-processing: propagate values (default: true)\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n pull_nested_quantifiers (bool) pre-processing: pull nested quantifiers (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n q.lift_ite (unsigned int) 0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers (default: 0)\n q.lite (bool) Use cheap quantifier elimination during pre-processing (default: false)\n qi.cost (string) expression specifying what is the cost of a given quantifier instantiation (default: (+ weight generation))\n qi.eager_threshold (double) threshold for eager quantifier instantiation (default: 10.0)\n qi.lazy_threshold (double) threshold for lazy quantifier instantiation (default: 20.0)\n qi.max_instances (unsigned int) maximum number of quantifier instantiations (default: 4294967295)\n qi.max_multi_patterns (unsigned int) specify the number of extra multi patterns (default: 0)\n qi.profile (bool) profile quantifier instantiation (default: false)\n qi.profile_freq (unsigned int) how frequent results are reported by qi.profile (default: 4294967295)\n qi.quick_checker (unsigned int) specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances (default: 0)\n quasi_macros (bool) try to find universally quantified formulas that are quasi-macros (default: false)\n random_seed (unsigned int) random seed for the smt solver (default: 0)\n refine_inj_axioms (bool) pre-processing: refine injectivity axioms (default: true)\n relevancy (unsigned int) relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant (default: 2)\n restart.max (unsigned int) maximal number of restarts. (default: 4294967295)\n restart_factor (double) when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold (default: 1.1)\n restart_strategy (unsigned int) 0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic (default: 1)\n restricted_quasi_macros (bool) try to find universally quantified formulas that are restricted quasi-macros (default: false)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n seq.max_unfolding (unsigned int) maximal unfolding depth for checking string equations and regular expressions (default: 1000000000)\n seq.min_unfolding (unsigned int) initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths (default: 1)\n seq.split_w_len (bool) enable splitting guided by length constraints (default: true)\n seq.validate (bool) enable self-validation of theory axioms created by seq theory (default: false)\n sk_hack (bool) hack for VCC (default: false)\n solve_eqs (bool) pre-processing: solve equalities (default: true)\n solve_eqs_max_occs (unsigned int) (default: infty) maximum number of occurrences for considering a variable for gaussian eliminations. (default: 4294967295)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n str.aggressive_length_testing (bool) prioritize testing concrete length values over generating more options (default: false)\n str.aggressive_unroll_testing (bool) prioritize testing concrete regex unroll counts over generating more options (default: true)\n str.aggressive_value_testing (bool) prioritize testing concrete string constant values over generating more options (default: false)\n str.fast_length_tester_cache (bool) cache length tester constants instead of regenerating them (default: false)\n str.fast_value_tester_cache (bool) cache value tester constants instead of regenerating them (default: true)\n str.fixed_length_naive_cex (bool) construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only) (default: true)\n str.fixed_length_refinement (bool) use abstraction refinement in fixed-length equation solver (Z3str3 only) (default: false)\n str.overlap_priority (double) theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true (default: -0.1)\n str.regex_automata_difficulty_threshold (unsigned int) difficulty threshold for regex automata heuristics (default: 1000)\n str.regex_automata_failed_automaton_threshold (unsigned int) number of failed automaton construction attempts after which a full automaton is automatically built (default: 10)\n str.regex_automata_failed_intersection_threshold (unsigned int) number of failed automaton intersection attempts after which intersection is always computed (default: 10)\n str.regex_automata_intersection_difficulty_threshold (unsigned int) difficulty threshold for regex intersection heuristics (default: 1000)\n str.regex_automata_length_attempt_threshold (unsigned int) number of length/path constraint attempts before checking unsatisfiability of regex terms (default: 10)\n str.string_constant_cache (bool) cache all generated string constants generated from anywhere in theory_str (default: true)\n str.strong_arrangements (bool) assert equivalences instead of implications when generating string arrangement axioms (default: true)\n string_solver (symbol) solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver) (default: seq)\n theory_aware_branching (bool) Allow the context to use extra information from theory solvers regarding literal branching prioritization. (default: false)\n theory_case_split (bool) Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead. (default: false)\n theory_solver (bool) theory solvers. (default: true)\n threads (unsigned int) maximal number of parallel threads. (default: 1)\n threads.cube_frequency (unsigned int) frequency for using cubing (default: 2)\n threads.max_conflicts (unsigned int) maximal number of conflicts between rounds of cubing for parallel SMT (default: 400)\nbuiltin probes:\n- ackr-bound-probe A probe to give an upper bound of Ackermann congruence lemmas that a formula might generate.\n- is-unbounded true if the goal contains integer/real constants that do not have lower/upper bounds.\n- is-pb true if the goal is a pseudo-boolean problem.\n- arith-max-deg max polynomial total degree of an arithmetic atom.\n- arith-avg-deg avg polynomial total degree of an arithmetic atom.\n- arith-max-bw max coefficient bit width.\n- arith-avg-bw avg coefficient bit width.\n- is-qflia true if the goal is in QF_LIA.\n- is-qfauflia true if the goal is in QF_AUFLIA.\n- is-qflra true if the goal is in QF_LRA.\n- is-qflira true if the goal is in QF_LIRA.\n- is-ilp true if the goal is ILP.\n- is-qfnia true if the goal is in QF_NIA (quantifier-free nonlinear integer arithmetic).\n- is-qfnra true if the goal is in QF_NRA (quantifier-free nonlinear real arithmetic).\n- is-nia true if the goal is in NIA (nonlinear integer arithmetic, formula may have quantifiers).\n- is-nra true if the goal is in NRA (nonlinear real arithmetic, formula may have quantifiers).\n- is-nira true if the goal is in NIRA (nonlinear integer and real arithmetic, formula may have quantifiers).\n- is-lia true if the goal is in LIA (linear integer arithmetic, formula may have quantifiers).\n- is-lra true if the goal is in LRA (linear real arithmetic, formula may have quantifiers).\n- is-lira true if the goal is in LIRA (linear integer and real arithmetic, formula may have quantifiers).\n- is-qfufnra true if the goal is QF_UFNRA (quantifier-free nonlinear real arithmetic with other theories).\n- is-qfbv-eq true if the goal is in a fragment of QF_BV which uses only =, extract, concat.\n- is-qffp true if the goal is in QF_FP (floats).\n- is-qffpbv true if the goal is in QF_FPBV (floats+bit-vectors).\n- is-qffplra true if the goal is in QF_FPLRA.\n- memory amount of used memory in megabytes.\n- depth depth of the input goal.\n- size number of assertions in the given goal.\n- num-exprs number of expressions/terms in the given goal.\n- num-consts number of non Boolean constants in the given goal.\n- num-bool-consts number of Boolean constants in the given goal.\n- num-arith-consts number of arithmetic constants in the given goal.\n- num-bv-consts number of bit-vector constants in the given goal.\n- produce-proofs true if proof generation is enabled for the given goal.\n- produce-model true if model generation is enabled for the given goal.\n- produce-unsat-cores true if unsat-core generation is enabled for the given goal.\n- has-quantifiers true if the goal contains quantifiers.\n- has-patterns true if the goal contains quantifiers with patterns.\n- is-propositional true if the goal is in propositional logic.\n- is-qfbv true if the goal is in QF_BV.\n- is-qfaufbv true if the goal is in QF_AUFBV.\n- is-quasi-pb true if the goal is quasi-pb.\n\"\n",error:"",status:"z3-ran",hash:"16d5fd2e2b789774ebd9e40e35f6222155230b5b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Z3 comes equipped with the following tactic combinators (aka tacticals):"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(then t s)")," applies /t to the input goal and /s to every subgoal produced by /t."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(par-then t s)")," applies /t to the input goal and /s to every subgoal produced by /t in parallel."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(or-else t s)")," first applies /t to the given goal, if it fails then returns the result of /s applied to the given goal."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(par-or t s)")," applies /t and /s in parallel until one of them succeed. The tactic fails if /t and /s fails."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(repeat t)")," Keep applying the given tactic until no subgoal is modified by it."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(repeat t n)")," Keep applying the given tactic until no subgoal is modified by it, or the number of iterations is greater than /n."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(try-for t ms)")," Apply tactic /t to the input goal, if it does not return in /ms milliseconds, it fails."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"(using-params t params)")," Apply the given tactic using the given parameters. ",(0,i.kt)("inlineCode",{parentName:"li"},"(! t params)")," is a shorthand for ",(0,i.kt)("inlineCode",{parentName:"li"},"(using-params t params)"),".")),(0,i.kt)("p",null,"The combinators ",(0,i.kt)("inlineCode",{parentName:"p"},"then"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"par-then"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"or-else")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"par-or")," accept arbitrary number of arguments. The following example demonstrate how to use these combinators."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(declare-const x Real)\n(declare-const y Real)\n(declare-const z Real)\n\n(assert (or (= x 0.0) (= x 1.0)))\n(assert (or (= y 0.0) (= y 1.0)))\n(assert (or (= z 0.0) (= z 1.0)))\n(assert (> (+ x y z) 2.0))\n\n(echo "split all...")\n(apply (repeat (or-else split-clause skip)))\n\n(echo "split at most 2...")\n(apply (repeat (or-else split-clause skip) 1))\n\n(echo "split and solve-eqs...")\n(apply (then (repeat (or-else split-clause skip)) solve-eqs))',result:{output:"split all...\n(goals\n(goal\n (= x 0.0)\n (= y 0.0)\n (= z 0.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 0.0)\n (= y 0.0)\n (= z 1.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 0.0)\n (= y 1.0)\n (= z 0.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 0.0)\n (= y 1.0)\n (= z 1.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 1.0)\n (= y 0.0)\n (= z 0.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 1.0)\n (= y 0.0)\n (= z 1.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 1.0)\n (= y 1.0)\n (= z 0.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n(goal\n (= x 1.0)\n (= y 1.0)\n (= z 1.0)\n (> (+ x y z) 2.0)\n :precision precise :depth 3)\n)\nsplit at most 2...\n(goals\n(goal\n (= x 0.0)\n (= y 0.0)\n (or (= z 0.0) (= z 1.0))\n (> (+ x y z) 2.0)\n :precision precise :depth 2)\n(goal\n (= x 0.0)\n (= y 1.0)\n (or (= z 0.0) (= z 1.0))\n (> (+ x y z) 2.0)\n :precision precise :depth 2)\n(goal\n (= x 1.0)\n (= y 0.0)\n (or (= z 0.0) (= z 1.0))\n (> (+ x y z) 2.0)\n :precision precise :depth 2)\n(goal\n (= x 1.0)\n (= y 1.0)\n (or (= z 0.0) (= z 1.0))\n (> (+ x y z) 2.0)\n :precision precise :depth 2)\n)\nsplit and solve-eqs...\n(goals\n(goal\n :precision precise :depth 4)\n)\n",error:"",status:"z3-ran",hash:"11ef70effe8c48845a00f8b4eff30d9e6fb84cf4"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"In the last apply command, the tactic ",(0,i.kt)("inlineCode",{parentName:"p"},"solve-eqs")," discharges all but one goal. Note that, this tactic generates one goal: the empty goal which is trivially satisfiable (i.e., feasible)"),(0,i.kt)("p",null,"A tactic can be used to decide whether a set of assertions has a solution (i.e., is satisfiable) or not. The command ",(0,i.kt)("inlineCode",{parentName:"p"},"check-sat-using")," is similar to ",(0,i.kt)("inlineCode",{parentName:"p"},"check-sat"),", but uses the given tactic instead of the Z3 default solver for solving the current set of assertions. If the tactic produces the empty goal, then check-sat-using returns sat. If the tactic produces a single goal containing ",(0,i.kt)("inlineCode",{parentName:"p"},"False"),", then ",(0,i.kt)("inlineCode",{parentName:"p"},"check-sat-using")," returns ",(0,i.kt)("inlineCode",{parentName:"p"},"unsat"),". Otherwise, it returns ",(0,i.kt)("inlineCode",{parentName:"p"},"unknown"),"."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x (_ BitVec 16))\n(declare-const y (_ BitVec 16))\n\n(assert (= (bvor x y) (_ bv13 16)))\n(assert (bvslt x y))\n\n(check-sat-using (then simplify solve-eqs bit-blast sat))\n(get-model)",result:{output:"sat\n(\n (define-fun y () (_ BitVec 16)\n #x000d)\n (define-fun x () (_ BitVec 16)\n #x0004)\n)\n",error:"",status:"z3-ran",hash:"a1a0dd4086f477d75ae7ac11cada93ecffb4bf1e"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"In the example above, the tactic used implements a basic bit-vector solver using equation solving, bit-blasting, and a propositional SAT solver."),(0,i.kt)("p",null,"In the following example, we use the combinator using-params to configure our little solver. We also include the tactic ",(0,i.kt)("inlineCode",{parentName:"p"},"aig")," which tries to compress Boolean formulas using And-Inverted Graphs."),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x (_ BitVec 16))\n(declare-const y (_ BitVec 16))\n\n(assert (= (bvadd (bvmul (_ bv32 16) x) y) (_ bv13 16)))\n(assert (bvslt (bvand x y) (_ bv10 16)))\n(assert (bvsgt y (bvneg (_ bv100 16))))\n\n(check-sat-using (then (using-params simplify :mul2concat true)\n solve-eqs \n bit-blast \n aig\n sat))\n(get-model)\n(get-value ((bvand x y)))",result:{output:"sat\n(\n (define-fun y () (_ BitVec 16)\n #xffad)\n (define-fun x () (_ BitVec 16)\n #xf803)\n)\n(((bvand x y) #xf801))\n",error:"",status:"z3-ran",hash:"6e14d6c3e985299c1e0335bc507378af4f564b90"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"The tactic ",(0,i.kt)("inlineCode",{parentName:"p"},"smt")," wraps the main solver in Z3 as a tactic:"),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n\n(assert (> x (+ y 1)))\n\n(check-sat-using smt)\n(get-model)",result:{output:"sat\n(\n (define-fun x () Int\n 0)\n (define-fun y () Int\n (- 2))\n)\n",error:"",status:"z3-ran",hash:"23c96dbd48afd1229415387ffe5150acbee000ed"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"We now show how to implement a solver for integer arithmetic using SAT. The solver is complete only for problems where every variable has a lower and upper bound:"),(0,i.kt)(l(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(declare-const z Int)\n\n(assert (and (> x 0) (< x 10)))\n(assert (and (> y 0) (< y 10)))\n(assert (and (> z 0) (< z 10)))\n(assert (= (+ (* 3 y) (* 2 x)) z))\n\n(check-sat-using (then (using-params simplify :arith-lhs true :som true)\n normalize-bounds\n lia2pb\n pb2bv\n bit-blast\n sat))\n(get-model)\n\n(reset)\n\n(declare-const x Int)\n(declare-const y Int)\n(declare-const z Int)\n\n(assert (= (+ (* 3 y) (* 2 x)) z))\n\n;; The next command will fail since x, y and z are not bounded.\n(check-sat-using (then (using-params simplify :arith-lhs true :som true)\n normalize-bounds\n lia2pb\n pb2bv\n bit-blast\n sat))\n(get-info :reason-unknown)",result:{output:'sat\n(\n (define-fun x () Int\n 1)\n (define-fun z () Int\n 5)\n (define-fun y () Int\n 1)\n)\nunknown\n(:reason-unknown "goal is in a fragment not supported by pb2bv. Offending expression: y")\n',error:"",status:"z3-ran",hash:"a2d087c9a9e2fd4a94001a156e46e31e11483202"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.38dea932.js b/assets/js/935f2afb.30579a10.js similarity index 65% rename from assets/js/935f2afb.38dea932.js rename to assets/js/935f2afb.30579a10.js index 89c1af37d..7065eae59 100644 --- a/assets/js/935f2afb.38dea932.js +++ b/assets/js/935f2afb.30579a10.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53],{1109:i=>{i.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"smtlibSidebar":[{"type":"category","label":"Logic","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Introduction","href":"/z3guide/docs/logic/intro","docId":"logic/intro"},{"type":"link","label":"Basic Commands","href":"/z3guide/docs/logic/basiccommands","docId":"logic/basiccommands"},{"type":"link","label":"Propositional Logic","href":"/z3guide/docs/logic/propositional-logic","docId":"logic/propositional-logic"},{"type":"link","label":"Uninterpreted Functions and Constants","href":"/z3guide/docs/logic/Uninterpreted-functions-and-constants","docId":"logic/Uninterpreted-functions-and-constants"},{"type":"link","label":"Quantifiers","href":"/z3guide/docs/logic/Quantifiers","docId":"logic/Quantifiers"},{"type":"link","label":"Lambdas","href":"/z3guide/docs/logic/Lambdas","docId":"logic/Lambdas"},{"type":"link","label":"Recursive Functions","href":"/z3guide/docs/logic/Recursive Functions","docId":"logic/Recursive Functions"},{"type":"link","label":"Conclusion","href":"/z3guide/docs/logic/Conclusion","docId":"logic/Conclusion"}]},{"type":"category","label":"Theories","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Arithmetic","href":"/z3guide/docs/theories/Arithmetic","docId":"theories/Arithmetic"},{"type":"link","label":"Bitvectors","href":"/z3guide/docs/theories/Bitvectors","docId":"theories/Bitvectors"},{"type":"link","label":"IEEE Floats","href":"/z3guide/docs/theories/IEEE Floats","docId":"theories/IEEE Floats"},{"type":"link","label":"Arrays","href":"/z3guide/docs/theories/Arrays","docId":"theories/Arrays"},{"type":"link","label":"Datatypes","href":"/z3guide/docs/theories/Datatypes","docId":"theories/Datatypes"},{"type":"link","label":"Strings","href":"/z3guide/docs/theories/Strings","docId":"theories/Strings"},{"type":"link","label":"Sequences","href":"/z3guide/docs/theories/Sequences","docId":"theories/Sequences"},{"type":"link","label":"Regular Expressions","href":"/z3guide/docs/theories/Regular Expressions","docId":"theories/Regular Expressions"},{"type":"link","label":"Unicode Characters","href":"/z3guide/docs/theories/Characters","docId":"theories/Characters"},{"type":"link","label":"Special Relations","href":"/z3guide/docs/theories/Special Relations","docId":"theories/Special Relations"}]},{"type":"category","label":"Strategies","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/z3guide/docs/strategies/intro","docId":"strategies/intro"},{"type":"link","label":"Goals","href":"/z3guide/docs/strategies/goals","docId":"strategies/goals"},{"type":"link","label":"Tactics","href":"/z3guide/docs/strategies/tactics","docId":"strategies/tactics"},{"type":"link","label":"Probes","href":"/z3guide/docs/strategies/probes","docId":"strategies/probes"},{"type":"link","label":"Simplifiers","href":"/z3guide/docs/strategies/simplifiers","docId":"strategies/simplifiers"},{"type":"link","label":"Tactics Summary","href":"/z3guide/docs/strategies/summary","docId":"strategies/summary"},{"type":"link","label":"Simplifiers Summary","href":"/z3guide/docs/strategies/simplifiers-summary","docId":"strategies/simplifiers-summary"}]},{"type":"category","label":"Optimization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/z3guide/docs/optimization/intro","docId":"optimization/intro"},{"type":"link","label":"Optimization from the API","href":"/z3guide/docs/optimization/apioptimization","docId":"optimization/apioptimization"},{"type":"link","label":"Arithmetical Optimization","href":"/z3guide/docs/optimization/arithmeticaloptimization","docId":"optimization/arithmeticaloptimization"},{"type":"link","label":"Soft Constraints","href":"/z3guide/docs/optimization/softconstraints","docId":"optimization/softconstraints"},{"type":"link","label":"Combining Objectives","href":"/z3guide/docs/optimization/combiningobjectives","docId":"optimization/combiningobjectives"},{"type":"link","label":"A Small Case Study","href":"/z3guide/docs/optimization/asmallcasestudy","docId":"optimization/asmallcasestudy"},{"type":"link","label":"Advanced Topics","href":"/z3guide/docs/optimization/advancedtopics","docId":"optimization/advancedtopics"}]},{"type":"category","label":"FixedPoints","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/z3guide/docs/fixedpoints/intro","docId":"fixedpoints/intro"},{"type":"link","label":"Basic Datalog","href":"/z3guide/docs/fixedpoints/basicdatalog","docId":"fixedpoints/basicdatalog"},{"type":"link","label":"Generalized PDR with SPACER","href":"/z3guide/docs/fixedpoints/engineforpdr","docId":"fixedpoints/engineforpdr"},{"type":"link","label":"Syntax","href":"/z3guide/docs/fixedpoints/syntax","docId":"fixedpoints/syntax"}]}]},"docs":{"fixedpoints/basicdatalog":{"id":"fixedpoints/basicdatalog","title":"Basic Datalog","description":"The default fixed-point engine is a bottom-up Datalog engine. It works with finite relations and uses finite table representations as hash tables as the default way to represent finite relations.","sidebar":"smtlibSidebar"},"fixedpoints/engineforpdr":{"id":"fixedpoints/engineforpdr","title":"Generalized PDR with SPACER","description":"A different underlying engine for fixed-points is based on the SPACER algorithm for","sidebar":"smtlibSidebar"},"fixedpoints/intro":{"id":"fixedpoints/intro","title":"Introduction","description":"Z3 contains an extension called muZ for reasoning about Constrained Horn Clauses and Datalog programs.","sidebar":"smtlibSidebar"},"fixedpoints/syntax":{"id":"fixedpoints/syntax","title":"Syntax","description":"Three different text-based input formats are accepted.","sidebar":"smtlibSidebar"},"logic/basiccommands":{"id":"logic/basiccommands","title":"Basic Commands","description":"The Z3 input format is an extension of the one defined by the SMT-LIB format.","sidebar":"smtlibSidebar"},"logic/Conclusion":{"id":"logic/Conclusion","title":"Conclusion","description":"Z3 is an efficient theorem prover used in many software testing, analysis and verification applications. In this tutorial, we covered its main capabilities using the textual interface. However, most applications use the Z3 programmatic API to access these features.","sidebar":"smtlibSidebar"},"logic/intro":{"id":"logic/intro","title":"Introduction","description":"Z3 is a state-of-the art theorem prover from Microsoft Research. It can be used to check the satisfiability of logical formulas over one or more theories. Z3 offers a compelling match for software analysis and verification tools, since several common software constructs map directly into supported theories.","sidebar":"smtlibSidebar"},"logic/Lambdas":{"id":"logic/Lambdas","title":"Lambdas","description":"Lambda binding is available as an extension to the theory of arrays.","sidebar":"smtlibSidebar"},"logic/propositional-logic":{"id":"logic/propositional-logic","title":"Propositional Logic","description":"The pre-defined sort Bool is the sort (type) of all Boolean propositional expressions. Z3 supports the usual Boolean operators and, or, xor, not, => (implication), ite (if-then-else). Bi-implications are represented using equality =. The following example shows how to prove that if p implies q and q implies r, then p implies r. We accomplish that by showing that the negation is unsatisfiable. The command define-fun is used to define a macro (aka alias). In this example, conjecture is an alias for the conjecture we want to prove.","sidebar":"smtlibSidebar"},"logic/Quantifiers":{"id":"logic/Quantifiers","title":"Quantifiers","description":"Z3 is a decision procedure for the combination of the previous quantifier-free theories. That is, it can answer whether a quantifier-free formula, modulo the theories referenced by the formula, is satisfiable or whether it is unsatisfiable. Z3 also accepts and can work with formulas that use quantifiers. It is no longer a decision procedure for such formulas in general (and for good reasons, as there can be no decision procedure for first-order logic).","sidebar":"smtlibSidebar"},"logic/Recursive Functions":{"id":"logic/Recursive Functions","title":"Recursive Functions","description":"SMTLIB2 standard: Page 62","sidebar":"smtlibSidebar"},"logic/Uninterpreted-functions-and-constants":{"id":"logic/Uninterpreted-functions-and-constants","title":"Uninterpreted Functions and Constants","description":"The basic building blocks of SMT formulas are constants and functions. Constants are just functions that take no arguments. So everything is really just a function.","sidebar":"smtlibSidebar"},"optimization/advancedtopics":{"id":"optimization/advancedtopics","title":"Advanced Topics","description":"Difference Logic","sidebar":"smtlibSidebar"},"optimization/apioptimization":{"id":"optimization/apioptimization","title":"Optimization from the API","description":"Z3\'s programmatic API exposes all available optimization features.","sidebar":"smtlibSidebar"},"optimization/arithmeticaloptimization":{"id":"optimization/arithmeticaloptimization","title":"Arithmetical Optimization","description":"Z3 extends the The SMTLIB format with the following commands for working with optimization objectives:","sidebar":"smtlibSidebar"},"optimization/asmallcasestudy":{"id":"optimization/asmallcasestudy","title":"A Small Case Study","description":"In collaboration with Anh-Dung Phan.","sidebar":"smtlibSidebar"},"optimization/combiningobjectives":{"id":"optimization/combiningobjectives","title":"Combining Objectives","description":"Many optimization problems require solving multiple objectives.","sidebar":"smtlibSidebar"},"optimization/intro":{"id":"optimization/intro","title":"Introduction","description":"Z3\'s main functionality to checking the satisfiability of logical formulas over one or more theories. Z3 can produce models for satisfiable formulas. Yet in many cases arbitrary models are insufficient and applications are really solving optimization problems: one or more values should be minimal or maximal. When there are multiple objectives, they should be combined using Pareto fronts, lexicographic priorities, or optimized independently. This section describes a feature exposed by Z3 that lets users formulate objective functions directly with Z3. Under the hood is a portfolio of approaches for solving linear optimization problems over SMT formulas, MaxSMT, and their combinations.","sidebar":"smtlibSidebar"},"optimization/softconstraints":{"id":"optimization/softconstraints","title":"Soft Constraints","description":"The (assert-soft formula [id id]) command asserts a weighted soft constraint. The weight must be a positive natural number, but is optional. If omitted, the weight is set to 1.","sidebar":"smtlibSidebar"},"strategies/goals":{"id":"strategies/goals","title":"Goals","description":"Z3 implements a methodology for orchestrating reasoning engines where \\"big\\" symbolic reasoning steps are represented as functions known as tactics, and tactics are composed using combinators known as tacticals. Tactics process sets of formulas called Goals.","sidebar":"smtlibSidebar"},"strategies/intro":{"id":"strategies/intro","title":"Introduction","description":"High-performance solvers, such as Z3, contain many tightly integrated, handcrafted heuristic combinations of algorithmic proof methods. While these heuristic combinations tend to be highly tuned for known classes of problems, they may easily perform very badly on new classes of problems. This issue is becoming increasingly pressing as solvers begin to gain the attention of practitioners in diverse areas of science and engineering. In many cases, changes to the solver heuristics can make a tremendous difference.","sidebar":"smtlibSidebar"},"strategies/probes":{"id":"strategies/probes","title":"Probes","description":"Probes (aka formula measures) are evaluated over goals. Boolean expressions over them can be built using relational operators and Boolean connectives. The tactic (fail-if cond) fails if the given goal does not satisfy the condition cond. Many numeric and Boolean measures are available in Z3. The command (help-tactic) provides the list of all built-in probes.","sidebar":"smtlibSidebar"},"strategies/simplifiers":{"id":"strategies/simplifiers","title":"Simplifiers","description":"A subset of tactics can be applied in incremental mode as pre-processing","sidebar":"smtlibSidebar"},"strategies/simplifiers-summary":{"id":"strategies/simplifiers-summary","title":"Simplifiers Summary","description":"Simplifier bit-blast","sidebar":"smtlibSidebar"},"strategies/summary":{"id":"strategies/summary","title":"Tactics Summary","description":"Tactic ackernannize_bv","sidebar":"smtlibSidebar"},"strategies/tactics":{"id":"strategies/tactics","title":"Tactics","description":"Z3 comes equipped with many built-in tactics. The command (help-tactic) provides a short description of all built-in tactics.","sidebar":"smtlibSidebar"},"theories/Arithmetic":{"id":"theories/Arithmetic","title":"Arithmetic","description":"Z3 supports the theory of arithmetic described in the following places.","sidebar":"smtlibSidebar"},"theories/Arrays":{"id":"theories/Arrays","title":"Arrays","description":"SMTLIB2 standard Arrays","sidebar":"smtlibSidebar"},"theories/Bitvectors":{"id":"theories/Bitvectors","title":"Bitvectors","description":"SMTLIB2 standard The Theory of fixed sized bit-vectors","sidebar":"smtlibSidebar"},"theories/Characters":{"id":"theories/Characters","title":"Unicode Characters","description":"The Unicode sort ranges over unicode characters.","sidebar":"smtlibSidebar"},"theories/Datatypes":{"id":"theories/Datatypes","title":"Datatypes","description":"Algebraic datatypes, known from programming languages such as ML, offer a convenient way for specifying common data structures. Records and tuples are special cases of algebraic datatypes, and so are scalars (enumeration types). But algebraic datatypes are more general. They can be used to specify finite lists, trees and other recursive structures.","sidebar":"smtlibSidebar"},"theories/IEEE Floats":{"id":"theories/IEEE Floats","title":"IEEE Floats","description":"SMTLIB2 standard IEEE Floating Point Numbers","sidebar":"smtlibSidebar"},"theories/Regular Expressions":{"id":"theories/Regular Expressions","title":"Regular Expressions","description":"SMTLIB2 standard The theory of unicode strings and regular expressions","sidebar":"smtlibSidebar"},"theories/Sequences":{"id":"theories/Sequences","title":"Sequences","description":"The sort constructor Seq can be used to create sequences over any base sort.","sidebar":"smtlibSidebar"},"theories/Special Relations":{"id":"theories/Special Relations","title":"Special Relations","description":"Special Binary Relations","sidebar":"smtlibSidebar"},"theories/Strings":{"id":"theories/Strings","title":"Strings","description":"SMTLIB2 standard The theory of unicode strings","sidebar":"smtlibSidebar"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53],{1109:i=>{i.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"smtlibSidebar":[{"type":"category","label":"Logic","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Introduction","href":"/z3guide/docs/logic/intro","docId":"logic/intro"},{"type":"link","label":"Basic Commands","href":"/z3guide/docs/logic/basiccommands","docId":"logic/basiccommands"},{"type":"link","label":"Propositional Logic","href":"/z3guide/docs/logic/propositional-logic","docId":"logic/propositional-logic"},{"type":"link","label":"Uninterpreted Functions and Constants","href":"/z3guide/docs/logic/Uninterpreted-functions-and-constants","docId":"logic/Uninterpreted-functions-and-constants"},{"type":"link","label":"Quantifiers","href":"/z3guide/docs/logic/Quantifiers","docId":"logic/Quantifiers"},{"type":"link","label":"Lambdas","href":"/z3guide/docs/logic/Lambdas","docId":"logic/Lambdas"},{"type":"link","label":"Recursive Functions","href":"/z3guide/docs/logic/Recursive Functions","docId":"logic/Recursive Functions"},{"type":"link","label":"Conclusion","href":"/z3guide/docs/logic/Conclusion","docId":"logic/Conclusion"}]},{"type":"category","label":"Theories","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Arithmetic","href":"/z3guide/docs/theories/Arithmetic","docId":"theories/Arithmetic"},{"type":"link","label":"Bitvectors","href":"/z3guide/docs/theories/Bitvectors","docId":"theories/Bitvectors"},{"type":"link","label":"IEEE Floats","href":"/z3guide/docs/theories/IEEE Floats","docId":"theories/IEEE Floats"},{"type":"link","label":"Arrays","href":"/z3guide/docs/theories/Arrays","docId":"theories/Arrays"},{"type":"link","label":"Datatypes","href":"/z3guide/docs/theories/Datatypes","docId":"theories/Datatypes"},{"type":"link","label":"Strings","href":"/z3guide/docs/theories/Strings","docId":"theories/Strings"},{"type":"link","label":"Sequences","href":"/z3guide/docs/theories/Sequences","docId":"theories/Sequences"},{"type":"link","label":"Regular Expressions","href":"/z3guide/docs/theories/Regular Expressions","docId":"theories/Regular Expressions"},{"type":"link","label":"Unicode Characters","href":"/z3guide/docs/theories/Characters","docId":"theories/Characters"},{"type":"link","label":"Special Relations","href":"/z3guide/docs/theories/Special Relations","docId":"theories/Special Relations"}]},{"type":"category","label":"Strategies","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/z3guide/docs/strategies/intro","docId":"strategies/intro"},{"type":"link","label":"Goals","href":"/z3guide/docs/strategies/goals","docId":"strategies/goals"},{"type":"link","label":"Tactics","href":"/z3guide/docs/strategies/tactics","docId":"strategies/tactics"},{"type":"link","label":"Probes","href":"/z3guide/docs/strategies/probes","docId":"strategies/probes"},{"type":"link","label":"Simplifiers","href":"/z3guide/docs/strategies/simplifiers","docId":"strategies/simplifiers"},{"type":"link","label":"Tactics Summary","href":"/z3guide/docs/strategies/summary","docId":"strategies/summary"},{"type":"link","label":"Simplifiers Summary","href":"/z3guide/docs/strategies/simplifiers-summary","docId":"strategies/simplifiers-summary"}]},{"type":"category","label":"Optimization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/z3guide/docs/optimization/intro","docId":"optimization/intro"},{"type":"link","label":"Optimization from the API","href":"/z3guide/docs/optimization/apioptimization","docId":"optimization/apioptimization"},{"type":"link","label":"Arithmetical Optimization","href":"/z3guide/docs/optimization/arithmeticaloptimization","docId":"optimization/arithmeticaloptimization"},{"type":"link","label":"Soft Constraints","href":"/z3guide/docs/optimization/softconstraints","docId":"optimization/softconstraints"},{"type":"link","label":"Combining Objectives","href":"/z3guide/docs/optimization/combiningobjectives","docId":"optimization/combiningobjectives"},{"type":"link","label":"A Small Case Study","href":"/z3guide/docs/optimization/asmallcasestudy","docId":"optimization/asmallcasestudy"},{"type":"link","label":"Advanced Topics","href":"/z3guide/docs/optimization/advancedtopics","docId":"optimization/advancedtopics"}]},{"type":"category","label":"FixedPoints","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/z3guide/docs/fixedpoints/intro","docId":"fixedpoints/intro"},{"type":"link","label":"Basic Datalog","href":"/z3guide/docs/fixedpoints/basicdatalog","docId":"fixedpoints/basicdatalog"},{"type":"link","label":"Generalized PDR with SPACER","href":"/z3guide/docs/fixedpoints/engineforpdr","docId":"fixedpoints/engineforpdr"},{"type":"link","label":"Syntax","href":"/z3guide/docs/fixedpoints/syntax","docId":"fixedpoints/syntax"}]}]},"docs":{"fixedpoints/basicdatalog":{"id":"fixedpoints/basicdatalog","title":"Basic Datalog","description":"The default fixed-point engine is a bottom-up Datalog engine. It works with finite relations and uses finite table representations as hash tables as the default way to represent finite relations.","sidebar":"smtlibSidebar"},"fixedpoints/engineforpdr":{"id":"fixedpoints/engineforpdr","title":"Generalized PDR with SPACER","description":"A different underlying engine for fixed-points is based on the SPACER algorithm for","sidebar":"smtlibSidebar"},"fixedpoints/intro":{"id":"fixedpoints/intro","title":"Introduction","description":"Z3 contains an extension called muZ for reasoning about Constrained Horn Clauses and Datalog programs.","sidebar":"smtlibSidebar"},"fixedpoints/syntax":{"id":"fixedpoints/syntax","title":"Syntax","description":"Three different text-based input formats are accepted.","sidebar":"smtlibSidebar"},"logic/basiccommands":{"id":"logic/basiccommands","title":"Basic Commands","description":"The Z3 input format is an extension of the one defined by the SMT-LIB format.","sidebar":"smtlibSidebar"},"logic/Conclusion":{"id":"logic/Conclusion","title":"Conclusion","description":"Z3 is an efficient theorem prover used in many software testing, analysis and verification applications. In this tutorial, we covered its main capabilities using the textual interface. However, most applications use the Z3 programmatic API to access these features.","sidebar":"smtlibSidebar"},"logic/intro":{"id":"logic/intro","title":"Introduction","description":"Z3 is a state-of-the art theorem prover from Microsoft Research. It can be used to check the satisfiability of logical formulas over one or more theories. Z3 offers a compelling match for software analysis and verification tools, since several common software constructs map directly into supported theories.","sidebar":"smtlibSidebar"},"logic/Lambdas":{"id":"logic/Lambdas","title":"Lambdas","description":"Lambda binding is available as an extension to the theory of arrays.","sidebar":"smtlibSidebar"},"logic/propositional-logic":{"id":"logic/propositional-logic","title":"Propositional Logic","description":"The pre-defined sort Bool is the sort (type) of all Boolean propositional expressions. Z3 supports the usual Boolean operators and, or, xor, not, => (implication), ite (if-then-else). Bi-implications are represented using equality =. The following example shows how to prove that if p implies q and q implies r, then p implies r. We accomplish that by showing that the negation is unsatisfiable. The command define-fun is used to define a macro (aka alias). In this example, conjecture is an alias for the conjecture we want to prove.","sidebar":"smtlibSidebar"},"logic/Quantifiers":{"id":"logic/Quantifiers","title":"Quantifiers","description":"Z3 is a decision procedure for the combination of the previous quantifier-free theories. That is, it can answer whether a quantifier-free formula, modulo the theories referenced by the formula, is satisfiable or whether it is unsatisfiable. Z3 also accepts and can work with formulas that use quantifiers. It is no longer a decision procedure for such formulas in general (and for good reasons, as there can be no decision procedure for first-order logic).","sidebar":"smtlibSidebar"},"logic/Recursive Functions":{"id":"logic/Recursive Functions","title":"Recursive Functions","description":"SMTLIB2 standard: Page 62","sidebar":"smtlibSidebar"},"logic/Uninterpreted-functions-and-constants":{"id":"logic/Uninterpreted-functions-and-constants","title":"Uninterpreted Functions and Constants","description":"The basic building blocks of SMT formulas are constants and functions. Constants are just functions that take no arguments. So everything is really just a function.","sidebar":"smtlibSidebar"},"optimization/advancedtopics":{"id":"optimization/advancedtopics","title":"Advanced Topics","description":"Difference Logic","sidebar":"smtlibSidebar"},"optimization/apioptimization":{"id":"optimization/apioptimization","title":"Optimization from the API","description":"Z3\'s programmatic API exposes all available optimization features.","sidebar":"smtlibSidebar"},"optimization/arithmeticaloptimization":{"id":"optimization/arithmeticaloptimization","title":"Arithmetical Optimization","description":"Z3 extends the The SMTLIB format with the following commands for working with optimization objectives:","sidebar":"smtlibSidebar"},"optimization/asmallcasestudy":{"id":"optimization/asmallcasestudy","title":"A Small Case Study","description":"In collaboration with Anh-Dung Phan.","sidebar":"smtlibSidebar"},"optimization/combiningobjectives":{"id":"optimization/combiningobjectives","title":"Combining Objectives","description":"Many optimization problems require solving multiple objectives.","sidebar":"smtlibSidebar"},"optimization/intro":{"id":"optimization/intro","title":"Introduction","description":"Z3\'s main functionality is checking the satisfiability of logical formulas over one or more theories. Z3 can also produce models for satisfiable formulas.","sidebar":"smtlibSidebar"},"optimization/softconstraints":{"id":"optimization/softconstraints","title":"Soft Constraints","description":"The (assert-soft formula [id id]) command asserts a weighted soft constraint. The weight must be a positive natural number, but is optional. If omitted, the weight is set to 1.","sidebar":"smtlibSidebar"},"strategies/goals":{"id":"strategies/goals","title":"Goals","description":"Z3 implements a methodology for orchestrating reasoning engines where \\"big\\" symbolic reasoning steps are represented as functions known as tactics, and tactics are composed using combinators known as tacticals. Tactics process sets of formulas called Goals.","sidebar":"smtlibSidebar"},"strategies/intro":{"id":"strategies/intro","title":"Introduction","description":"High-performance solvers, such as Z3, contain many tightly integrated, handcrafted heuristic combinations of algorithmic proof methods. While these heuristic combinations tend to be highly tuned for known classes of problems, they may easily perform very badly on new classes of problems. This issue is becoming increasingly pressing as solvers gain the attention of practitioners in diverse areas of science and engineering. In many cases, changes to the solver heuristics can make a tremendous difference.","sidebar":"smtlibSidebar"},"strategies/probes":{"id":"strategies/probes","title":"Probes","description":"Probes (aka formula measures) are evaluated over goals. Boolean expressions over them can be built using relational operators and Boolean connectives. The tactic (fail-if cond) fails if the given goal does not satisfy the condition cond. Many numeric and Boolean measures are available in Z3. The command (help-tactic) provides the list of all built-in probes.","sidebar":"smtlibSidebar"},"strategies/simplifiers":{"id":"strategies/simplifiers","title":"Simplifiers","description":"A subset of tactics can be applied in incremental mode as pre-processing","sidebar":"smtlibSidebar"},"strategies/simplifiers-summary":{"id":"strategies/simplifiers-summary","title":"Simplifiers Summary","description":"Simplifier bit-blast","sidebar":"smtlibSidebar"},"strategies/summary":{"id":"strategies/summary","title":"Tactics Summary","description":"Tactic ackernannize_bv","sidebar":"smtlibSidebar"},"strategies/tactics":{"id":"strategies/tactics","title":"Tactics","description":"Z3 comes equipped with many built-in tactics. The command (help-tactic) provides a short description of all built-in tactics.","sidebar":"smtlibSidebar"},"theories/Arithmetic":{"id":"theories/Arithmetic","title":"Arithmetic","description":"Z3 supports the theory of arithmetic described in the following places.","sidebar":"smtlibSidebar"},"theories/Arrays":{"id":"theories/Arrays","title":"Arrays","description":"SMTLIB2 standard Arrays","sidebar":"smtlibSidebar"},"theories/Bitvectors":{"id":"theories/Bitvectors","title":"Bitvectors","description":"SMTLIB2 standard The Theory of fixed sized bit-vectors","sidebar":"smtlibSidebar"},"theories/Characters":{"id":"theories/Characters","title":"Unicode Characters","description":"The Unicode sort ranges over unicode characters.","sidebar":"smtlibSidebar"},"theories/Datatypes":{"id":"theories/Datatypes","title":"Datatypes","description":"Algebraic datatypes, known from programming languages such as ML, offer a convenient way for specifying common data structures. Records and tuples are special cases of algebraic datatypes, and so are scalars (enumeration types). But algebraic datatypes are more general. They can be used to specify finite lists, trees and other recursive structures.","sidebar":"smtlibSidebar"},"theories/IEEE Floats":{"id":"theories/IEEE Floats","title":"IEEE Floats","description":"SMTLIB2 standard IEEE Floating Point Numbers","sidebar":"smtlibSidebar"},"theories/Regular Expressions":{"id":"theories/Regular Expressions","title":"Regular Expressions","description":"SMTLIB2 standard The theory of unicode strings and regular expressions","sidebar":"smtlibSidebar"},"theories/Sequences":{"id":"theories/Sequences","title":"Sequences","description":"The sort constructor Seq can be used to create sequences over any base sort.","sidebar":"smtlibSidebar"},"theories/Special Relations":{"id":"theories/Special Relations","title":"Special Relations","description":"Special Binary Relations","sidebar":"smtlibSidebar"},"theories/Strings":{"id":"theories/Strings","title":"Strings","description":"SMTLIB2 standard The theory of unicode strings","sidebar":"smtlibSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/adb42a35.53c23ef3.js b/assets/js/adb42a35.f2d8767d.js similarity index 99% rename from assets/js/adb42a35.53c23ef3.js rename to assets/js/adb42a35.f2d8767d.js index 30d6f0289..e39fb5e42 100644 --- a/assets/js/adb42a35.53c23ef3.js +++ b/assets/js/adb42a35.f2d8767d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4011],{5747:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>m,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>d,toc:()=>u});var n=i(7462),a=(i(7294),i(3905)),o=i(7634),r=i.n(o);const s={title:"Arithmetical Optimization",sidebar_position:3},l=void 0,d={unversionedId:"optimization/arithmeticaloptimization",id:"optimization/arithmeticaloptimization",title:"Arithmetical Optimization",description:"Z3 extends the The SMTLIB format with the following commands for working with optimization objectives:",source:"@site/docs-smtlib/04 - optimization/03 - arithmeticaloptimization.md",sourceDirName:"04 - optimization",slug:"/optimization/arithmeticaloptimization",permalink:"/z3guide/docs/optimization/arithmeticaloptimization",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/03 - arithmeticaloptimization.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Arithmetical Optimization",sidebar_position:3},sidebar:"smtlibSidebar",previous:{title:"Optimization from the API",permalink:"/z3guide/docs/optimization/apioptimization"},next:{title:"Soft Constraints",permalink:"/z3guide/docs/optimization/softconstraints"}},m={},u=[{value:"Maximize and Minimize",id:"maximize-and-minimize",level:2},{value:"Unbounded Objectives",id:"unbounded-objectives",level:2},{value:"Tight Bounds",id:"tight-bounds",level:2}],c={toc:u};function p(e){let{components:t,...i}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Z3 extends the The ",(0,a.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/"},"SMTLIB format")," with the following commands for working with optimization objectives:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Command"),(0,a.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"(maximize t)")),(0,a.kt)("td",{parentName:"tr",align:null},"The result of ",(0,a.kt)("inlineCode",{parentName:"td"},"(check-sat)")," should seek to produce a model that ",(0,a.kt)("em",{parentName:"td"},"maximizes")," the value of ",(0,a.kt)("inlineCode",{parentName:"td"},"t"),". The expression can be integer, real or Bit-vector sort.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"(minimize t)")),(0,a.kt)("td",{parentName:"tr",align:null},"The result of ",(0,a.kt)("inlineCode",{parentName:"td"},"(check-sat)")," should seek to produce a model that ",(0,a.kt)("em",{parentName:"td"},"minimizes")," the value of ",(0,a.kt)("inlineCode",{parentName:"td"},"t")," The expression can be integer, real or Bit-vector sort.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"(add-soft b [:weight w] [:id id])")),(0,a.kt)("td",{parentName:"tr",align:null},"The result of ",(0,a.kt)("inlineCode",{parentName:"td"},"(check-sat)")," should seek to satisfy soft constraints. The default weigth is 1. Weights are used to give priorities. Soft constraints can be grouped in disjoint groups by tagging them with optional identifiers.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"(get-objectives)")),(0,a.kt)("td",{parentName:"tr",align:null},"After ",(0,a.kt)("inlineCode",{parentName:"td"},"(check-sat)")," retrieve the values of the maximize, minimize and soft constraint objectives.")))),(0,a.kt)("h2",{id:"maximize-and-minimize"},"Maximize and Minimize"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"(maximize t)")," command instructs check-sat to produce a model that maximizes the value of term t. The type of ",(0,a.kt)("inlineCode",{parentName:"p"},"t")," must be either ",(0,a.kt)("inlineCode",{parentName:"p"},"Int"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"Real"),", or ",(0,a.kt)("inlineCode",{parentName:"p"},"BitVec"),"."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (< x 2))\n(assert (< (- y x) 1))\n(maximize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) 2)\n)\n",error:"",status:"z3-ran",hash:"f9dfcc64cc935f2d972db0460ac87f91253205f5"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"(minimize t)")," command instructs check-sat to produce a model that minimizes the value of term ",(0,a.kt)("inlineCode",{parentName:"p"},"t"),"."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (< x 4))\n(assert (< (- y x) 1))\n(assert (> y 1))\n(minimize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) 4)\n)\n",error:"",status:"z3-ran",hash:"c05a4d79608f3ec5922d381c9de007dbeb526a5c"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("h2",{id:"unbounded-objectives"},"Unbounded Objectives"),(0,a.kt)("p",null,"Not all objective functions are bounded. Z3 indicates that the maxima are at infinity, and the minima are negative infinity."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (< x 2))\n(assert (> (- y x) 1))\n(maximize (+ x y))\n(check-sat)\n",result:{output:"sat\n",error:"",status:"z3-ran",hash:"af360fa0fd21f40b97376c8bfa135834b3aebbb2"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (< x 4))\n(assert (< (- y x) 1))\n(assert (< y 1))\n(minimize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) (* (- 1) oo))\n)\n",error:"",status:"z3-ran",hash:"f104a89e625948d3b3191acb4a15a4de75bcf07b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("h2",{id:"tight-bounds"},"Tight Bounds"),(0,a.kt)("p",null,"Not all finite bounds can be expressed as real numbers. Bounds obtained around strict inequalities are expressed using infinitesimals."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Real)\n(declare-const y Real)\n(assert (< x 4))\n(assert (< y 5))\n(maximize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) (+ 9.0 (* (- 2.0) epsilon)))\n)\n",error:"",status:"z3-ran",hash:"c78c626eead92d60c74647e5757036f4109eb2a3"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4011],{5747:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>m,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>d,toc:()=>u});var n=i(7462),a=(i(7294),i(3905)),o=i(7634),r=i.n(o);const s={title:"Arithmetical Optimization",sidebar_position:3},l=void 0,d={unversionedId:"optimization/arithmeticaloptimization",id:"optimization/arithmeticaloptimization",title:"Arithmetical Optimization",description:"Z3 extends the The SMTLIB format with the following commands for working with optimization objectives:",source:"@site/docs-smtlib/04 - optimization/03 - arithmeticaloptimization.md",sourceDirName:"04 - optimization",slug:"/optimization/arithmeticaloptimization",permalink:"/z3guide/docs/optimization/arithmeticaloptimization",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/03 - arithmeticaloptimization.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Arithmetical Optimization",sidebar_position:3},sidebar:"smtlibSidebar",previous:{title:"Optimization from the API",permalink:"/z3guide/docs/optimization/apioptimization"},next:{title:"Soft Constraints",permalink:"/z3guide/docs/optimization/softconstraints"}},m={},u=[{value:"Maximize and Minimize",id:"maximize-and-minimize",level:2},{value:"Unbounded Objectives",id:"unbounded-objectives",level:2},{value:"Tight Bounds",id:"tight-bounds",level:2}],c={toc:u};function p(e){let{components:t,...i}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Z3 extends the The ",(0,a.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/"},"SMTLIB format")," with the following commands for working with optimization objectives:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Command"),(0,a.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"(maximize t)")),(0,a.kt)("td",{parentName:"tr",align:null},"The result of ",(0,a.kt)("inlineCode",{parentName:"td"},"(check-sat)")," should seek to produce a model that ",(0,a.kt)("em",{parentName:"td"},"maximizes")," the value of ",(0,a.kt)("inlineCode",{parentName:"td"},"t"),". The expression can be integer, real or Bit-vector sort.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"(minimize t)")),(0,a.kt)("td",{parentName:"tr",align:null},"The result of ",(0,a.kt)("inlineCode",{parentName:"td"},"(check-sat)")," should seek to produce a model that ",(0,a.kt)("em",{parentName:"td"},"minimizes")," the value of ",(0,a.kt)("inlineCode",{parentName:"td"},"t")," The expression can be integer, real or Bit-vector sort.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"(add-soft b [:weight w] [:id id])")),(0,a.kt)("td",{parentName:"tr",align:null},"The result of ",(0,a.kt)("inlineCode",{parentName:"td"},"(check-sat)")," should seek to satisfy soft constraints. The default weight is 1. Weights are used to give priorities. Soft constraints can be grouped in disjoint groups by tagging them with optional identifiers.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"(get-objectives)")),(0,a.kt)("td",{parentName:"tr",align:null},"After ",(0,a.kt)("inlineCode",{parentName:"td"},"(check-sat)")," retrieve the values of the maximize, minimize and soft constraint objectives.")))),(0,a.kt)("h2",{id:"maximize-and-minimize"},"Maximize and Minimize"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"(maximize t)")," command instructs check-sat to produce a model that maximizes the value of term t. The type of ",(0,a.kt)("inlineCode",{parentName:"p"},"t")," must be either ",(0,a.kt)("inlineCode",{parentName:"p"},"Int"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"Real"),", or ",(0,a.kt)("inlineCode",{parentName:"p"},"BitVec"),"."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (< x 2))\n(assert (< (- y x) 1))\n(maximize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) 2)\n)\n",error:"",status:"z3-ran",hash:"f9dfcc64cc935f2d972db0460ac87f91253205f5"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"(minimize t)")," command instructs check-sat to produce a model that minimizes the value of term ",(0,a.kt)("inlineCode",{parentName:"p"},"t"),"."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (< x 4))\n(assert (< (- y x) 1))\n(assert (> y 1))\n(minimize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) 4)\n)\n",error:"",status:"z3-ran",hash:"c05a4d79608f3ec5922d381c9de007dbeb526a5c"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("h2",{id:"unbounded-objectives"},"Unbounded Objectives"),(0,a.kt)("p",null,"Not all objective functions are bounded. Z3 indicates that the maxima are at infinity, and the minima are negative infinity."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (< x 2))\n(assert (> (- y x) 1))\n(maximize (+ x y))\n(check-sat)\n",result:{output:"sat\n",error:"",status:"z3-ran",hash:"af360fa0fd21f40b97376c8bfa135834b3aebbb2"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (< x 4))\n(assert (< (- y x) 1))\n(assert (< y 1))\n(minimize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) (* (- 1) oo))\n)\n",error:"",status:"z3-ran",hash:"f104a89e625948d3b3191acb4a15a4de75bcf07b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("h2",{id:"tight-bounds"},"Tight Bounds"),(0,a.kt)("p",null,"Not all finite bounds can be expressed as real numbers. Bounds obtained around strict inequalities are expressed using infinitesimals."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Real)\n(declare-const y Real)\n(assert (< x 4))\n(assert (< y 5))\n(maximize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) (+ 9.0 (* (- 2.0) epsilon)))\n)\n",error:"",status:"z3-ran",hash:"c78c626eead92d60c74647e5757036f4109eb2a3"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b38a955c.584bfa87.js b/assets/js/b38a955c.553d8e02.js similarity index 98% rename from assets/js/b38a955c.584bfa87.js rename to assets/js/b38a955c.553d8e02.js index eb9cc0524..a63839379 100644 --- a/assets/js/b38a955c.584bfa87.js +++ b/assets/js/b38a955c.553d8e02.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4026],{213:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>b,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var i=n(7462),s=(n(7294),n(3905)),o=n(7634),r=n.n(o);const l={title:"Recursive Functions",sidebar_position:7},u=void 0,a={unversionedId:"logic/Recursive Functions",id:"logic/Recursive Functions",title:"Recursive Functions",description:"SMTLIB2 standard: Page 62",source:"@site/docs-smtlib/01 - logic/07 - Recursive Functions.md",sourceDirName:"01 - logic",slug:"/logic/Recursive Functions",permalink:"/z3guide/docs/logic/Recursive Functions",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/07 - Recursive Functions.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Recursive Functions",sidebar_position:7},sidebar:"smtlibSidebar",previous:{title:"Lambdas",permalink:"/z3guide/docs/logic/Lambdas"},next:{title:"Conclusion",permalink:"/z3guide/docs/logic/Conclusion"}},c={},d=[{value:"Mutually Recursive Functions",id:"mutually-recursive-functions",level:2}],f={toc:d};function b(e){let{components:t,...n}=e;return(0,s.kt)("wrapper",(0,i.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("blockquote",null,(0,s.kt)("p",{parentName:"blockquote"}," ",(0,s.kt)("strong",{parentName:"p"},"SMTLIB2")," standard: ",(0,s.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2021-05-12.pdf"},"Page 62"))),(0,s.kt)("p",null,"You can define recursive functions"),(0,s.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(define-fun-rec length ((ls (List Int))) Int\n (if ((_ is nil) ls) 0 (+ 1 (length (tail ls)))))\n\n(define-fun-rec nat-list ((ls (List Int))) Bool \n (if ((_ is nil) ls)\n true\n (and (>= (head ls) 0) (nat-list (tail ls)))))\n\n(declare-const list1 (List Int))\n(declare-const list2 (List Int))\n(assert (> (length list1) (length list2)))\n(assert (not (nat-list list2)))\n(assert (nat-list list1))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun list2 () (List Int)\n (insert (- 1) nil))\n (define-fun list1 () (List Int)\n (insert 0 (insert 2437 nil)))\n)\n",error:"",status:"z3-ran",hash:"a0c65b977b47159c2c7b85fdd060098f6f0a34ca"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Z3 unfolds the definition of recursive functions incrementally by iterative deepening:\nit attempts first to establish satisfiabiltiy modulo a fixed bound on number of unfoldings;\nif the resulting formula is unsatisfiable ",(0,s.kt)("em",{parentName:"p"},"and")," the reason for unsatisfiability is due to the\nbound restriction, it increases the fixed bound incrementally. Note that this approach does not\ninvolve reasoning by induction that is often required to prove deeper properties of recursive functions.\nThis scheme allows to decide satisfiability and unsatisfiability for a limited, but often useful,\nclass of formulas."),(0,s.kt)("h2",{id:"mutually-recursive-functions"},"Mutually Recursive Functions"),(0,s.kt)("p",null,"You can also define functions that are mutually recursive.\nThe syntax requires to declare all functions first in one block, and then\ndefine the bodies of the recursive functions in a second block."),(0,s.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(define-funs-rec \n ((ping ((x Int) (y Bool)) Int)\n (pong ((a Int) (b Bool)) Int))\n\n ((if y (pong (+ x 1) (not y)) (- x 1))\n (if b (ping (- a 1) (not b)) a)))\n\n(declare-const x Int)\n(assert (> x 0))\n(assert (> (ping x true) x))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun x () Int\n 1)\n)\n",error:"",status:"z3-ran",hash:"8152b9332bd3e557e44fb09631fa11d4bb76bb0b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}b.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4026],{213:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>b,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var i=n(7462),s=(n(7294),n(3905)),o=n(7634),r=n.n(o);const l={title:"Recursive Functions",sidebar_position:7},u=void 0,a={unversionedId:"logic/Recursive Functions",id:"logic/Recursive Functions",title:"Recursive Functions",description:"SMTLIB2 standard: Page 62",source:"@site/docs-smtlib/01 - logic/07 - Recursive Functions.md",sourceDirName:"01 - logic",slug:"/logic/Recursive Functions",permalink:"/z3guide/docs/logic/Recursive Functions",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/07 - Recursive Functions.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Recursive Functions",sidebar_position:7},sidebar:"smtlibSidebar",previous:{title:"Lambdas",permalink:"/z3guide/docs/logic/Lambdas"},next:{title:"Conclusion",permalink:"/z3guide/docs/logic/Conclusion"}},c={},d=[{value:"Mutually Recursive Functions",id:"mutually-recursive-functions",level:2}],f={toc:d};function b(e){let{components:t,...n}=e;return(0,s.kt)("wrapper",(0,i.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("blockquote",null,(0,s.kt)("p",{parentName:"blockquote"}," ",(0,s.kt)("strong",{parentName:"p"},"SMTLIB2")," standard: ",(0,s.kt)("a",{parentName:"p",href:"http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2021-05-12.pdf"},"Page 62"))),(0,s.kt)("p",null,"You can define recursive functions"),(0,s.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(define-fun-rec length ((ls (List Int))) Int\n (if ((_ is nil) ls) 0 (+ 1 (length (tail ls)))))\n\n(define-fun-rec nat-list ((ls (List Int))) Bool \n (if ((_ is nil) ls)\n true\n (and (>= (head ls) 0) (nat-list (tail ls)))))\n\n(declare-const list1 (List Int))\n(declare-const list2 (List Int))\n(assert (> (length list1) (length list2)))\n(assert (not (nat-list list2)))\n(assert (nat-list list1))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun list2 () (List Int)\n (insert (- 1) nil))\n (define-fun list1 () (List Int)\n (insert 0 (insert 2437 nil)))\n)\n",error:"",status:"z3-ran",hash:"a0c65b977b47159c2c7b85fdd060098f6f0a34ca"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Z3 unfolds the definition of recursive functions incrementally by iterative deepening:\nit attempts first to establish satisfiability modulo a fixed bound on number of unfoldings;\nif the resulting formula is unsatisfiable ",(0,s.kt)("em",{parentName:"p"},"and")," the reason for unsatisfiability is due to the\nbound restriction, it increases the fixed bound incrementally. Note that this approach does not\ninvolve reasoning by induction that is often required to prove deeper properties of recursive functions.\nThis scheme allows to decide satisfiability and unsatisfiability for a limited, but often useful,\nclass of formulas."),(0,s.kt)("h2",{id:"mutually-recursive-functions"},"Mutually Recursive Functions"),(0,s.kt)("p",null,"You can also define functions that are mutually recursive.\nThe syntax requires to declare all functions first in one block, and then\ndefine the bodies of the recursive functions in a second block."),(0,s.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(define-funs-rec \n ((ping ((x Int) (y Bool)) Int)\n (pong ((a Int) (b Bool)) Int))\n\n ((if y (pong (+ x 1) (not y)) (- x 1))\n (if b (ping (- a 1) (not b)) a)))\n\n(declare-const x Int)\n(assert (> x 0))\n(assert (> (ping x true) x))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun x () Int\n 1)\n)\n",error:"",status:"z3-ran",hash:"8152b9332bd3e557e44fb09631fa11d4bb76bb0b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b4ec11a8.d45ff0cf.js b/assets/js/b4ec11a8.d45ff0cf.js deleted file mode 100644 index 92831adab..000000000 --- a/assets/js/b4ec11a8.d45ff0cf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[843],{6524:(t,a,e)=>{e.r(a),e.d(a,{assets:()=>d,contentTitle:()=>i,default:()=>o,frontMatter:()=>r,metadata:()=>m,toc:()=>p});var n=e(7462),l=(e(7294),e(3905));e(7634);const r={},i=void 0,m={unversionedId:"Parameters",id:"Parameters",title:"Parameters",description:"Z3 Options",source:"@site/docs-programming/04 - Parameters.md",sourceDirName:".",slug:"/Parameters",permalink:"/z3guide/programming/Parameters",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-programming/04 - Parameters.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"MBQI",permalink:"/z3guide/programming/Example Programs/MBQI"},next:{title:"API Reference",permalink:"/z3guide/programming/API Reference"}},d={},p=[{value:"Global Parameters",id:"global-parameters",level:2},{value:"pi",id:"pi",level:2},{value:"tactic",id:"tactic",level:2},{value:"pp",id:"pp",level:2},{value:"sat",id:"sat",level:2},{value:"solver",id:"solver",level:2},{value:"opt",id:"opt",level:2},{value:"parallel",id:"parallel",level:2},{value:"nnf",id:"nnf",level:2},{value:"algebraic",id:"algebraic",level:2},{value:"combined_solver",id:"combined_solver",level:2},{value:"rcf",id:"rcf",level:2},{value:"ackermannization",id:"ackermannization",level:2},{value:"nlsat",id:"nlsat",level:2},{value:"fp",id:"fp",level:2},{value:"smt",id:"smt",level:2},{value:"sls",id:"sls",level:2}],u={toc:p};function o(t){let{components:a,...e}=t;return(0,l.kt)("wrapper",(0,n.Z)({},u,e,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"Z3 Options"),(0,l.kt)("h2",{id:"global-parameters"},"Global Parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"auto_config"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use heuristics to automatically select solver and configure it"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"debug_ref_count"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"debug support for AST reference counting"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dot_proof_file"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"file in which to output graphical proofs"),(0,l.kt)("td",{parentName:"tr",align:null},"proof.dot")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dump_models"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dump models whenever check-sat returns sat"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"encoding"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"string encoding used internally: unicode"),(0,l.kt)("td",{parentName:"tr",align:null},"bmp")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"memory_high_watermark"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set high watermark for memory consumption (in bytes), if 0 then there is no limit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"memory_high_watermark_mb"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set high watermark for memory consumption (in megabytes), if 0 then there is no limit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"memory_max_alloc_count"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set hard upper limit for memory allocations, if 0 then there is no limit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"memory_max_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set hard upper limit for memory consumption (in megabytes), if 0 then there is no limit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"model"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"model generation for solvers, this parameter can be overwritten when creating a solver"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"model_validate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"validate models produced by solvers"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"proof generation, it must be enabled when the Z3 context is created"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rlimit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"default resource limit used for solvers. Unrestricted when set to 0."),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smtlib2_compliant"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable/disable SMT-LIB 2.0 compliance"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"stats"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable/disable statistics"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"(default: infty) timeout in milliseconds."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"trace"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"trace generation for VCC"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"trace_file_name"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"trace out file name (see option 'trace')"),(0,l.kt)("td",{parentName:"tr",align:null},"z3.log")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"type_check"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"type checker (alias for well_sorted_check)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"unsat_core"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"unsat-core generation for solvers, this parameter can be overwritten when creating a solver, not every solver in Z3 supports unsat core generation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"verbose"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"be verbose, where the value is the verbosity level"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"warning"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable/disable warning messages"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"well_sorted_check"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"type checker"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"pi"},"pi"),(0,l.kt)("p",null,"pattern inference (heuristics) for universal formulas (without annotation)"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - do not infer patterns with arithmetic terms, 1 - use patterns with arithmetic terms if there is no other pattern, 2 - always use patterns with arithmetic terms"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith_weight"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"default weight for quantifiers where the only available pattern has nested arithmetic terms"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"block_loop_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"block looping patterns during pattern inference"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_multi_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"when patterns are not provided, the prover uses a heuristic to infer them, this option sets the threshold on the number of extra multi-patterns that can be created; by default, the prover creates at most one multi-pattern when there is no unary pattern"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"non_nested_arith_weight"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"default weight for quantifiers where the only available pattern has non nested arithmetic terms"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pull_quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pull nested quantifiers, if no pattern was found"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"use_database"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use pattern database"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"warnings"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable/disable warning messages in the pattern inference module"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"tactic"},"tactic"),(0,l.kt)("p",null,"tactic parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"blast_term_ite.max_inflation"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"multiplicative factor of initial term size."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"blast_term_ite.max_steps"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of steps allowed for tactic."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"default_tactic"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"overwrite default tactic in strategic solver"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"propagate_values.max_rounds"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of rounds to propagate values."),(0,l.kt)("td",{parentName:"tr",align:null},"4")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs.context_solve"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"solve equalities within disjunctions."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs.ite_solver"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use if-then-else solvers."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs.max_occs"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of occurrences for considering a variable for gaussian eliminations."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs.theory_solver"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use theory solvers."),(0,l.kt)("td",{parentName:"tr",align:null},"true")))),(0,l.kt)("h2",{id:"pp"},"pp"),(0,l.kt)("p",null,"pretty printer"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bounded"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"ignore characters exceeding max width"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv_literals"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use Bit-Vector literals (e.g, #x0F and #b0101) during pretty printing"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv_neg"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use bvneg when displaying Bit-Vector literals where the most significant bit is 1"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"decimal"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pretty print real numbers using decimal notation (the output may be truncated). Z3 adds a ? if the value is not precise"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"decimal_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of decimal places to be used when pp.decimal=true"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"fixed_indent"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use a fixed indentation for applications"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"flat_assoc"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"flat associative operators (when pretty printing SMT2 terms/formulas)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"fp_real_literals"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use real-numbered floating point literals (e.g, +1.0p-1) during pretty printing"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. term depth (when pretty printing SMT2 terms/formulas)"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_indent"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. indentation in pretty printer"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_num_lines"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. number of lines to be displayed in pretty printer"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_ribbon"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. ribbon (width - indentation) in pretty printer"),(0,l.kt)("td",{parentName:"tr",align:null},"80")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_width"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. width in pretty printer"),(0,l.kt)("td",{parentName:"tr",align:null},"80")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"min_alias_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"min. size for creating an alias for a shared term (when pretty printing SMT2 terms/formulas)"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pretty_proof"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use slower, but prettier, printer for proofs"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify_implies"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify nested implications for pretty printing"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"single_line"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"ignore line breaks when true"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"sat"},"sat"),(0,l.kt)("p",null,"propositional SAT solver"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"abce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate blocked clauses using asymmetric literals"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"acce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate covered clauses using asymmetric added literals"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"anf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable ANF based simplification in-processing"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"anf.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay ANF simplification by in-processing round"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"anf.exlin"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable extended linear simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"asymmetric branching"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.all"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"asymmetric branching on all literals per clause"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of simplification rounds to wait until invoking asymmetric branch simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"approx. maximum number of literals visited during asymmetric branching"),(0,l.kt)("td",{parentName:"tr",align:null},"100000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.rounds"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of rounds to run asymmetric branch simplifications if progress is made"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.sampled"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use sampling based asymmetric branching based on binary implication graph"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"asymmetric tautology elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"backtrack.conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts before enabling chronological backtracking"),(0,l.kt)("td",{parentName:"tr",align:null},"4000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"backtrack.scopes"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of scopes to enable chronological backtracking"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bca"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"blocked clause addition - add blocked binary clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate blocked clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bce_at"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate blocked clauses only once at the given simplification round"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bce_delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay eliminate blocked clauses until simplification round"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"binspr"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"blocked_clause_limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of literals visited during blocked clause elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"100000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"branching.anti_exploration"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply anti-exploration heuristic for branch selection"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"branching.heuristic"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"branching heuristic vsids, chb"),(0,l.kt)("td",{parentName:"tr",align:null},"vsids")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"burst_search"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts before first global simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cardinality.encoding"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit"),(0,l.kt)("td",{parentName:"tr",align:null},"grouped")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cardinality.solver"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use cardinality solver"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate covered clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.minimize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize computed core"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.minimize_partial"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply partial (cheap) core minimization"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable AIG based simplification in-processing"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.aig"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract aigs (and ites) from cluases for cut simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay cut simplification by in-processing round"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.dont_cares"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"integrate dont cares with cuts"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.force"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"force redoing cut-enumeration until a fixed-point"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.lut"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract luts from clauses for cut simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.npn3"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract 3 input functions from clauses for cut simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.redundancies"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"integrate redundancy checking of cuts"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.xor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract xors from clauses for cut simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.init_clause_weight"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial clause weight for DDFW local search"),(0,l.kt)("td",{parentName:"tr",align:null},"8")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.reinit_base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"increment basis for geometric backoff scheme of re-initialization of weights"),(0,l.kt)("td",{parentName:"tr",align:null},"10000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.restart_base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of flips used a starting point for hessitant restart backoff"),(0,l.kt)("td",{parentName:"tr",align:null},"100000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.threads"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of ddfw threads to run in parallel with sat solver"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.use_reward_pct"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"percentage to pick highest reward variable when it has reward 0"),(0,l.kt)("td",{parentName:"tr",align:null},"15")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw_search"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use ddfw local search instead of CDCL"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dimacs.core"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract core from DIMACS benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.activity"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dump variable activities"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.binary"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use Binary DRAT output format"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.check_sat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"build up internal trace, check satisfying model"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.check_unsat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"build up internal proof and check"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.disable"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"override anything that enables DRAT"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.file"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"file to dump DRAT proofs"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dyn_sub_res"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dynamic subsumption resolution for minimizing learned clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_vars"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable variable elimination using resolution during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_vars_bdd"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable variable elimination using BDD recompilation during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_vars_bdd_delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay elimination of variables using BDDs until after simplification round"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_pre_simplify"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable pre simplifications before the bounded search"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"euf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable euf solver (this feature is preliminary and not ready for general consumption)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"force_cleanup"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"force cleanup to remove tautologies and simplify clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"garbage collection strategy: psm, glue, glue_psm, dyn_psm"),(0,l.kt)("td",{parentName:"tr",align:null},"glue_psm")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.burst"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"perform eager garbage collection during initialization"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.defrag"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"defragment clauses when garbage collecting"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.increment"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"increment to the garbage collection threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"500")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.initial"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"learned clauses garbage collection frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"20000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.k"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm)"),(0,l.kt)("td",{parentName:"tr",align:null},"7")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.small_lbd"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"learned clauses with small LBD are never deleted (only used in dyn_psm)"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inprocess.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of inprocessing passes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inprocess.out"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"file to dump result of the first inprocessing step and exit"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"local_search"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use local search instead of CDCL"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"local_search_dbg_flips"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"write debug information for number of flips"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"local_search_mode"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"local search algorithm, either default wsat or qsat"),(0,l.kt)("td",{parentName:"tr",align:null},"wsat")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"local_search_threads"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of local search threads to find satisfiable solution"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.cutoff"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat"),(0,l.kt)("td",{parentName:"tr",align:null},"depth")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth."),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.fraction"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat"),(0,l.kt)("td",{parentName:"tr",align:null},"0.4")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.freevars"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"cube free variable fraction. Used when lookahead.cube.cutoff is freevars"),(0,l.kt)("td",{parentName:"tr",align:null},"0.8")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.psat.clause_base"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"clause base for PSAT cutoff"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.psat.trigger"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.psat.var_exp"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"free variable exponent for PSAT cutoff"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.delta_fraction"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"number between 0 and 1, the smaller the more literals are selected for double lookahead"),(0,l.kt)("td",{parentName:"tr",align:null},"1.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.double"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable doubld lookahead"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.global_autarky"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prefer to branch on variables that occur in clauses that are reduced"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.preselect"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use pre-selection of subset of variables for branching"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.reward"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu"),(0,l.kt)("td",{parentName:"tr",align:null},"march_cu")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.use_learned"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use learned clauses when selecting lookahead literal"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead_scores"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract lookahead scores. A utility that can only be used from the DIMACS front-end"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead_simplify"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use lookahead solver during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead_simplify.bca"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"add learned binary clauses as part of lookahead simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_memory"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum amount of memory in megabytes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"minimize_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize learned clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"override_incremental"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.lemma_format"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"generate either cardinality or pb lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"cardinality")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.min_arity"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"minimal arity to compile pb/cardinality constraints to CNF"),(0,l.kt)("td",{parentName:"tr",align:null},"9")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.resolve"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"resolution strategy for boolean algebra solver: cardinality, rounding"),(0,l.kt)("td",{parentName:"tr",align:null},"cardinality")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.solver"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver)"),(0,l.kt)("td",{parentName:"tr",align:null},"solver")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"phase selection strategy: always_false, always_true, basic_caching, random, caching"),(0,l.kt)("td",{parentName:"tr",align:null},"caching")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase.sticky"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use sticky phase caching"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"prob_search"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use probsat local search instead of CDCL"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply failed literal detection during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing_binary"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"probe binary clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing_cache"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"add binary literals as lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing_cache_limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"cache binaries unless overall memory usage exceeds cache limit"),(0,l.kt)("td",{parentName:"tr",align:null},"1024")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing_limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"limit to the number of probe calls"),(0,l.kt)("td",{parentName:"tr",align:null},"5000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"propagate.prefetch"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prefetch watch lists for assigned literals"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_freq"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"frequency of random case splits"),(0,l.kt)("td",{parentName:"tr",align:null},"0.01")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random seed"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"reorder.activity_scale"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"scaling factor for activity update"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"reorder.base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts per random reorder"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"reorder.itau"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"inverse temperature for softmax"),(0,l.kt)("td",{parentName:"tr",align:null},"4.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rephase.base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts per rephase"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.cls_cutoff1"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"100000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"700000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"approx. maximum number of literals visited during variable elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"500000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.lit_cutoff_range1"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"700")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.lit_cutoff_range2"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"400")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.lit_cutoff_range3"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"300")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.occ_cutoff"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"first cutoff (on number of positive/negative occurrences) for Boolean variable elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.occ_cutoff_range1"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"8")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.occ_cutoff_range2"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.occ_cutoff_range3"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"restart strategy: static, luby, ema or geometric"),(0,l.kt)("td",{parentName:"tr",align:null},"ema")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.emafastglue"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"ema alpha factor for fast moving average"),(0,l.kt)("td",{parentName:"tr",align:null},"0.03")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.emaslowglue"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"ema alpha factor for slow moving average"),(0,l.kt)("td",{parentName:"tr",align:null},"1e-05")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.factor"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"restart increment factor for geometric strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"1.5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.fast"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use fast restart approach only removing less active literals."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.initial"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial restart (number of conflicts)"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.margin"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"margin between fast and slow restart factors. For ema"),(0,l.kt)("td",{parentName:"tr",align:null},"1.1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of restarts."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"retain_blocked_clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"retain blocked clauses as lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"scc"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate Boolean variables by computing strongly connected components"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"scc.tr"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply transitive reduction, eliminate redundant binary clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"search.sat.conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"period for solving for sat (in number of conflicts)"),(0,l.kt)("td",{parentName:"tr",align:null},"400")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"search.unsat.conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"period for solving for unsat (in number of conflicts)"),(0,l.kt)("td",{parentName:"tr",align:null},"400")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set initial delay of simplification by a conflict count"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smt"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use the SAT solver based incremental SMT core"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smt.proof.check"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"check SMT proof while it is created"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smt.proof.check_rup"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply forward RUP proof checking"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"subsumption"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate subsumed clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"subsumption.limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"approx. maximum number of literals visited during subsumption (and subsumption resolution)"),(0,l.kt)("td",{parentName:"tr",align:null},"100000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of parallel threads to use"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"variable_decay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"multiplier (divided by 100) for the VSIDS activity increment"),(0,l.kt)("td",{parentName:"tr",align:null},"110")))),(0,l.kt)("h2",{id:"solver"},"solver"),(0,l.kt)("p",null,"solver parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"axioms2files"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print negated theory axioms to separate files during search"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cancel_backup_file"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"file to save partial search state if search is canceled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"instantiations2console"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print quantifier instantiations to the console"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lemmas2console"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print lemmas during search"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof.check"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"check proof logs"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof.log"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"log clause proof trail into a file"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof.save"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"save proof log into a proof object that can be extracted using (get-proof)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof.trim"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"trim and save proof into a proof object that an be extracted using (get-proof)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smtlib2_log"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"file to save solver interaction"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"timeout on the solver object; overwrites a global timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")))),(0,l.kt)("h2",{id:"opt"},"opt"),(0,l.kt)("p",null,"optimization parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dump_benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dump benchmarks for profiling"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dump_models"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"display intermediary models to stdout"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_01"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate 01 variables"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_core_rotate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable core rotation to both sample cores and correction sets"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_lns"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable LNS during weighted maxsat"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_sat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable the new SAT core for propositional constraints"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_sls"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable SLS tuning during weighted maxsat"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"incremental"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"set incremental mode. It disables pre-processing and enables adding constraints in model event handler"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lns_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial conflict count for LNS search"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxlex.enable"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable maxlex heuristic for lexicographic MaxSAT problems"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.add_upper_bound_block"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"restict upper bound with constraint"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.hill_climb"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"give preference for large weight cores"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.max_core_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"break batch of generated cores if size reaches this number"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.max_correction_set_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"allow generating correction set constraints up to maximal size"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.max_num_cores"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of cores per round"),(0,l.kt)("td",{parentName:"tr",align:null},"200")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.maximize_assignment"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"find an MSS/MCS to improve current assignment"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.pivot_on_correction_set"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"reduce soft constraints if the current correction set is smaller than current core"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.wmax"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use weighted theory solver to constrain upper bounds"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxsat_engine"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"select engine for maxsat: 'core_maxsat', 'wmax', 'maxres', 'pd-maxres', 'maxres-bin', 'rc2'"),(0,l.kt)("td",{parentName:"tr",align:null},"maxres")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"optsmt_engine"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"select optimization engine: 'basic', 'symba'"),(0,l.kt)("td",{parentName:"tr",align:null},"basic")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.compile_equality"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"compile arithmetical equalities into pseudo-Boolean equality (instead of two inequalites)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pp.neat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use neat (as opposed to less readable, but faster) pretty printer when displaying context"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pp.wcnf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print maxsat benchmark into wcnf format"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"priority"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"select how to priortize objectives: 'lex' (lexicographic), 'pareto', 'box'"),(0,l.kt)("td",{parentName:"tr",align:null},"lex")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rc2.totalizer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use totalizer for rc2 encoding"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rlimit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"resource limit (0 means no limit)"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solution_prefix"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"path prefix to dump intermediary, but non-optimal, solutions"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"timeout (in milliseconds) (UINT_MAX and 0 mean no timeout)"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")))),(0,l.kt)("h2",{id:"parallel"},"parallel"),(0,l.kt)("p",null,"parameters for parallel solver"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"conquer.backtrack_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"frequency to apply core minimization during conquer"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"conquer.batch_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of cubes to batch together for fast conquer"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"conquer.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay of cubes until applying conquer"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"conquer.restart.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of restarts during conquer phase"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable parallel solver by default on selected tactics (for QF_BV)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.exp"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"restart and inprocess max is multiplied by simplify.exp ^ depth"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.inprocess.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of inprocessing steps during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of conflicts during simplifcation phase"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.restart.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of restarts during simplification phase"),(0,l.kt)("td",{parentName:"tr",align:null},"5000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"caps maximal number of threads below the number of processors"),(0,l.kt)("td",{parentName:"tr",align:null},"10000")))),(0,l.kt)("h2",{id:"nnf"},"nnf"),(0,l.kt)("p",null,"negation normal form"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ignore_labels"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"remove/ignore labels in the input formula, this option is ignored if proofs are enabled"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_memory"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum amount of memory in megabytes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mode"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full"),(0,l.kt)("td",{parentName:"tr",align:null},"skolem")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sk_hack"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"hack for VCC"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"algebraic"},"algebraic"),(0,l.kt)("p",null,"real algebraic number package. Non-default parameter settings are not supported"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use polynomial factorization to simplify polynomials representing algebraic numbers"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor_max_prime"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step"),(0,l.kt)("td",{parentName:"tr",align:null},"31")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor_num_primes"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifiting and searching"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor_search_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space"),(0,l.kt)("td",{parentName:"tr",align:null},"5000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"min_mag"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16"),(0,l.kt)("td",{parentName:"tr",align:null},"16")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"zero_accuracy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k)"),(0,l.kt)("td",{parentName:"tr",align:null},"0")))),(0,l.kt)("h2",{id:"combined_solver"},"combined_solver"),(0,l.kt)("p",null,"combines two solvers: non-incremental (solver1) and incremental (solver2)"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ignore_solver1"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, solver 2 is always used"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solver2_timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"fallback to solver 1 after timeout even when in incremental model"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solver2_unknown"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"what should be done when solver 2 returns unknown: 0 - just return unknown, 1 - execute solver 1 if quantifier free problem, 2 - execute solver 1"),(0,l.kt)("td",{parentName:"tr",align:null},"1")))),(0,l.kt)("h2",{id:"rcf"},"rcf"),(0,l.kt)("p",null,"real closed fields"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"clean_denominators"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"clean denominators before root isolation"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inf_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"a value k that is the initial interval size (i.e., (0, 1/2^l)) used as an approximation for infinitesimal values"),(0,l.kt)("td",{parentName:"tr",align:null},"24")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"initial_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"a value k that is the initial interval size (as 1/2^k) when creating transcendentals and approximated division"),(0,l.kt)("td",{parentName:"tr",align:null},"24")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lazy_algebraic_normalization"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"during sturm-seq and square-free polynomial computations, only normalize algebraic polynomial expressions when the defining polynomial is monic"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"during sign determination we switch from interval arithmetic to complete methods when the interval size is less than 1/2^k, where k is the max_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"128")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"use_prem"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use pseudo-remainder instead of remainder when computing GCDs and Sturm-Tarski sequences"),(0,l.kt)("td",{parentName:"tr",align:null},"true")))),(0,l.kt)("h2",{id:"ackermannization"},"ackermannization"),(0,l.kt)("p",null,"solving UF via ackermannization"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"eager"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eagerly instantiate all congruence rules"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inc_sat_backend"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use incremental SAT"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sat_backend"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use SAT rather than SMT in qfufbv_ackr_tactic"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"nlsat"},"nlsat"),(0,l.kt)("p",null,"nonlinear solver"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"check_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"check lemmas on the fly using an independent nlsat solver"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"factor polynomials produced during conflict resolution."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inline_vars"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"inline variables that can be isolated from equations (not supported in incremental mode)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lazy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"how lazy the solver is."),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"log_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"display lemmas as self-contained SMT formulas"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of conflicts."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_memory"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum amount of memory in megabytes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"minimize_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"randomize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"randomize selection of a witness in nlsat."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"reorder"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"reorder variables."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random seed."),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"shuffle_vars"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use a random variable order."),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify conflicts using equalities before resolving them in nlsat solver."),(0,l.kt)("td",{parentName:"tr",align:null},"true")))),(0,l.kt)("h2",{id:"fp"},"fp"),(0,l.kt)("p",null,"fixedpoint parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bmc.linear_unrolling_depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximal level to explore"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.all_or_nothing_deltas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"compile rules so that it is enough for the delta relation in union and widening operations to determine only whether the updated relation was modified or not"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.check_relation"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"name of default relation to check. operations on the default relation will be verified using SMT solving"),(0,l.kt)("td",{parentName:"tr",align:null},"null")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.compile_with_widening"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"widening will be used to compile recursive rules"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.dbg_fpr_nonempty_relation_signature"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, finite_product_relation will attempt to avoid creating inner relation with empty signature by putting in half of the table columns, if it would have been empty otherwise"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.default_relation"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"default relation implementation: external_relation, pentagon"),(0,l.kt)("td",{parentName:"tr",align:null},"pentagon")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.default_table"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"default table implementation: sparse, hashtable, bitvector, interval"),(0,l.kt)("td",{parentName:"tr",align:null},"sparse")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.default_table_checked"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, the default table will be default_table inside a wrapper that checks that its results are the same as of default_table_checker table"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.default_table_checker"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"see default_table_checked"),(0,l.kt)("td",{parentName:"tr",align:null},"null")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.explanations_on_relation_level"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, explanations are generated as history of each relation, rather than per fact (generate_explanations must be set to true for this option to have any effect)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.generate_explanations"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"produce explanations for produced facts when using the datalog engine"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.initial_restart_timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"length of saturation run before the first restart (in ms), zero means no restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.magic_sets_for_queries"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"magic set transformation will be used for queries"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.output_profile"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"determines whether profile information should be output when outputting Datalog rules or instructions"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.print.tuples"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"determines whether tuples for output predicates should be output"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.profile_timeout_milliseconds"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"instructions and rules that took less than the threshold will not be printed when printed the instruction/rule list"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.similarity_compressor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"rules that differ only in values of constants will be merged into a single rule"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.similarity_compressor_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"if similarity_compressor is on, this value determines how many similar rules there must be in order for them to be merged"),(0,l.kt)("td",{parentName:"tr",align:null},"11")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.subsumption"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, removes/filters predicates with total transitions"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Time limit used for saturation"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.unbound_compressor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"auxiliary relations will be introduced to avoid unbound variables in rule heads"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.use_map_names"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use names from map files when displaying tuples"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"engine"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"Select: auto-config, datalog, bmc, spacer"),(0,l.kt)("td",{parentName:"tr",align:null},"auto-config")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"generate_proof_trace"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"trace for 'sat' answer as proof object"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_aig"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"Dump clauses in AIG text format (AAG) to the given file name"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_answer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print answer instance(s) to query"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_boogie_certificate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print certificate for reachability or non-reachability using a format understood by Boogie"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_certificate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print certificate for reachability or non-reachability"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_fixedpoint_extensions"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use SMT-LIB2 fixedpoint extensions, instead of pure SMT2, when printing rules"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_low_level_smt2"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use (faster) low-level SMT2 printer (the printer is scalable but the result may not be as readable)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_statistics"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print statistics"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_with_variable_declarations"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use variable declarations when displaying rules (instead of attempting to use original names)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.arith.solver"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.blast_term_ite_inflation"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximum inflation for non-Boolean ite-terms expansion: 0 (none), k (multiplicative)"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.ctp"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable counterexample-to-pushing"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.dump_benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Dump SMT queries as benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.dump_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"Threshold in seconds on dumping benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"5.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.elim_aux"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Eliminate auxiliary variables in reachability facts"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.eq_prop"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable equality and bound propagation in arithmetic"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.expand_bnd"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable expand-bound lemma generalization"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gg.concretize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable global guidance concretize"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gg.conjecture"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable global guidance conjecture"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gg.subsume"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable global guidance subsume"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.global"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable global guidance"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gpdr"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use GPDR solving strategy for non-linear CHC"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gpdr.bfs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use BFS exploration strategy for expanding model search"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.ground_pobs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Ground pobs by using values from a model"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 = use old implementation of unsat-core-generation, 1 = use new implementation of IUC generation, 2 = use new implementation of IUC + min-cut optimization"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.arith"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 = use simple Farkas plugin, 1 = use simple Farkas plugin with constant from other partition (like old unsat-core-generation),2 = use Gaussian elimination optimization (broken), 3 = use additive IUC plugin"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.debug_proof"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prints proof used by unsat-core-learner for debugging purposes (debugging)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.old_hyp_reducer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use old hyp reducer instead of new implementation, for debugging only"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.print_farkas_stats"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prints for each proof how many Farkas lemmas it contains and how many of these participate in the cut (for debugging)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.split_farkas_literals"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Split Farkas literals"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.keep_proxy"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"keep proxy variables (internal parameter)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.logic"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"SMT-LIB logic to configure internal SMT solvers"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.max_level"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximum level to explore"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.max_num_contexts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of contexts to create"),(0,l.kt)("td",{parentName:"tr",align:null},"500")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.mbqi"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable mbqi"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.min_level"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Minimal level to explore"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.native_mbp"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use native mbp of Z3"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.order_children"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: order of enqueuing children in non-linear rules : 0 (original), 1 (reverse), 2 (random)"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.p3.share_invariants"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Share invariants lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.p3.share_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Share frame lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.propagate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable propagate/pushing phase"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.push_pob"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"push blocked pobs to higher level"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.push_pob_max_depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximum depth at which push_pob is enabled"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.q3"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Allow quantified lemmas in frames"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.q3.instantiate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Instantiate quantified lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.q3.qgen.normalize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"normalize cube before quantified generalization"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.q3.use_qgen"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use quantified lemma generalizer"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.random_seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Random seed to be used by SMT solver"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.reach_dnf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Restrict reachability facts to DNF"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.reset_pob_queue"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: reset pob obligation queue when entering a new level"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.restart_initial_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Initial threshold for restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable resetting obligation queue"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.simplify_lemmas_post"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify derived lemmas after inductive propagation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.simplify_lemmas_pre"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify derived lemmas before inductive propagation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.simplify_pob"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify pobs by removing redundant constraints"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.trace_file"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"Log file for progress events"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_array_eq_generalizer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: attempt to generalize lemmas with array equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_bg_invs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable external background invariants"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_derivations"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: using derivation mechanism to cache intermediate results for non-linear rules"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_euf_gen"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Generalize lemmas and pobs using implied equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_inc_clause"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use incremental clause to represent trans"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_inductive_generalizer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"generalize lemmas using induction strengthening"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_iuc"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable Interpolating Unsat Core(IUC) for lemma generalization"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_lemma_as_cti"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: use a lemma instead of a CTI in flexible_trace"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_lim_num_gen"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable limit numbers generalizer to get smaller numbers"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.validate_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Validate each lemma after generalization"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.weak_abs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Weak abstraction"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"tab.selection"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"selection method for tabular strategy: weight (default), first, var-use"),(0,l.kt)("td",{parentName:"tr",align:null},"weight")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"validate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"validate result (by proof checking or model checking)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.array_blast"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try to eliminate local array terms using Ackermannization -- some array terms may remain"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.array_blast_full"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate all local array variables by QE"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.bit_blast"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"bit-blast bit-vectors"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.coalesce_rules"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"coalesce rules"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.coi"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use cone of influence simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.compress_unbound"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"compress tails with unbound variables"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.elim_term_ite"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Eliminate term-ite expressions"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.elim_term_ite.inflation"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximum inflation for non-Boolean ite-terms blasting: 0 (none), k (multiplicative)"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.fix_unbound_vars"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"fix unbound variables in tail"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.inline_eager"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try eager inlining of rules"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.inline_linear"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try linear inlining method"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.inline_linear_branch"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try linear inlining method with potential expansion"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_arrays"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Transforms P(a) into P(i, a","[i]"," a)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_arrays.enforce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Transforms P(a) into P(i, a","[i]","), discards a from predicate"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_arrays.nb_quantifier"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Gives the number of quantifiers per array"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_arrays.slice_technique"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"<","no-slicing",">","=",">"," GetId(i) = i, ","<","smash",">"," =",">"," GetId(i) = true"),(0,l.kt)("td",{parentName:"tr",align:null},"no-slicing")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"instantiate quantified Horn clauses using E-matching heuristic"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.magic"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"perform symbolic magic set transformation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.quantify_arrays"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"create quantified Horn clauses from clauses with arrays"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.scale"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"add scaling variable to linear real arithmetic clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.slice"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify clause set using slicing"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.subsumption_checker"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable subsumption checker (no support for model conversion)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.tail_simplifier_pve"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"propagate_variable_equivalences"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.transform_arrays"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Rewrites arrays equalities and applies select over store"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.unfold_rules"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"unfold rules statically using iterative squaring"),(0,l.kt)("td",{parentName:"tr",align:null},"0")))),(0,l.kt)("h2",{id:"smt"},"smt"),(0,l.kt)("p",null,"smt solver based on lazy smt"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.auto_config_simplex"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"force simplex solver in auto_config"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.bprop_on_pivoted_rows"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"propagate bounds on rows changed by the pivot operation"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.branch_cut_ratio"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"branch/cut ratio for linear integer arithmetic"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.dump_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dump arithmetic theory lemmas to files"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.eager_eq_axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eager equality axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.enable_hnf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable hnf (Hermite Normal Form) cuts"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.greatest_error_pivot"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Pivoting strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.ignore_int"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"treat integer variables as real"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.int_eq_branch"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"branching using derived integer equations"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.min"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize cost"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"(incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.branching"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of calls to final check before invoking bounded nlsat check"),(0,l.kt)("td",{parentName:"tr",align:null},"500")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.expp"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"expensive patching"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.gr_q"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's quota"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"run grobner's basis heuristic"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_cnfl_to_report"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's maximum number of conflicts to report"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_eqs_growth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's number of equalities growth"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_expr_degree_growth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's maximum expr degree growth"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_expr_size_growth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's maximum expr size growth"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's call frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"4")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_max_simplified"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's maximum number of simplifications"),(0,l.kt)("td",{parentName:"tr",align:null},"10000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_subs_fixed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - no subs, 1 - substitute, 2 - substitute fixed zeros only"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.horner"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"run horner's heuristic"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.horner_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"horner's call frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"4")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.horner_row_length_limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"row is disregarded by the heuristic if its length is longer than the value"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.horner_subs_fixed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - no subs, 1 - substitute, 2 - substitute fixed zeros only"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.nra"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.order"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"run order lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.rounds"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2"),(0,l.kt)("td",{parentName:"tr",align:null},"1024")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.tangents"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"run tangent lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.print_ext_var_names"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print external variable names"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.print_stats"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print statistic"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.propagate_eqs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"propagate (cheap) equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.propagation_mode"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.random_initial_value"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use random initial values in the simplex-based procedure for linear arithmetic"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.rep_freq"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"the report frequency, in how many iterations print the cost and other info"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.simplex_strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"simplex strategy for the solver"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.solver"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver"),(0,l.kt)("td",{parentName:"tr",align:null},"6")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"array.extensional"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extensional array theory"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"array.weak"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"weak array theory"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"auto_config"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"automatically configure solver"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"delay internalize expensive bit-vector operations"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.enable_int2bv"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable support for int2bv and bv2int operators"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.eq_axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable redundant equality axioms for bit-vectors"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.reflect"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"create enode for every bit-vector term"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.size_reduce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.watch_diseq"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use watch lists instead of eager axioms for bit-vectors"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"candidate_models"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"create candidate models even when quantifier or theory reasoning is incomplete"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"case_split"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"clause_proof"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"record a clausal proof"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.extend_nonlocal_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.extend_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extend unsat core with literals that trigger (potential) quantifier instances"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.extend_patterns.max_distance"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"limits the distance of a pattern-extended unsat core"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.minimize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize unsat core produced by SMT context"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.validate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"[internal]"," validate unsat core produced by SMT context. This option is intended for debugging"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cube_depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"cube depth."),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.eq"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable dynamic ackermannization for transtivity of equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.factor"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"number of instance per conflict"),(0,l.kt)("td",{parentName:"tr",align:null},"0.1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.gc"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Dynamic ackermannization garbage collection frequency (per conflict)"),(0,l.kt)("td",{parentName:"tr",align:null},"2000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.gc_inv_decay"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"Dynamic ackermannization garbage collection decay"),(0,l.kt)("td",{parentName:"tr",align:null},"0.8")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of times the congruence rule must be used before Leibniz's axiom is expanded"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"delay_units"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true then z3 will not restart when a unit clause is learned"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"delay_units_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of learned unit clauses before restarting, ignored if delay_units is false"),(0,l.kt)("td",{parentName:"tr",align:null},"32")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dt_lazy_splits"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_unconstrained"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: eliminate unconstrained subterms"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ematching"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"E-Matching based quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"induction"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable generation of induction lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lemma_gc_strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"logic"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"logic used to setup the SMT solver"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"macro_finder"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try to find universally quantified formulas that can be viewed as macros"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of conflicts before giving up."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"model based quantifier instantiation (MBQI)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.force_template"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight ",">","= mbqi.force_template are forced to be used as a template"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.id"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Only use model-based instantiation for quantifiers with id's beginning with string"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.max_cexs"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.max_cexs_incr"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.max_iterations"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of rounds of MBQI"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.trace"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.conflict_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"conflict frequency for Pseudo-Boolean theory"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.learn_complements"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"learn complement literals for Pseudo-Boolean theory"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase_caching_off"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts while phase caching is off"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase_caching_on"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts while phase caching is on"),(0,l.kt)("td",{parentName:"tr",align:null},"400")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase_selection"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"propagate_values"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: propagate values"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pull_nested_quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: pull nested quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"q.lift_ite"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"q.lite"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use cheap quantifier elimination during pre-processing"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.cost"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"expression specifying what is the cost of a given quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"(+ weight generation)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.eager_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"threshold for eager quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"10.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.lazy_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"threshold for lazy quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"20.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.max_instances"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of quantifier instantiations"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.max_multi_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"specify the number of extra multi patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.profile"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"profile quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.profile_freq"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"how frequent results are reported by qi.profile"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.quick_checker"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"quasi_macros"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try to find universally quantified formulas that are quasi-macros"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random seed for the smt solver"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"refine_inj_axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: refine injectivity axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"relevancy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of restarts."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart_factor"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"1.1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart_strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restricted_quasi_macros"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try to find universally quantified formulas that are restricted quasi-macros"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seq.max_unfolding"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal unfolding depth for checking string equations and regular expressions"),(0,l.kt)("td",{parentName:"tr",align:null},"1000000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seq.min_unfolding"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seq.split_w_len"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable splitting guided by length constraints"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seq.validate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable self-validation of theory axioms created by seq theory"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: solve equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.aggressive_length_testing"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prioritize testing concrete length values over generating more options"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.aggressive_unroll_testing"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prioritize testing concrete regex unroll counts over generating more options"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.aggressive_value_testing"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prioritize testing concrete string constant values over generating more options"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.fast_length_tester_cache"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"cache length tester constants instead of regenerating them"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.fast_value_tester_cache"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"cache value tester constants instead of regenerating them"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.fixed_length_naive_cex"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.fixed_length_refinement"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use abstraction refinement in fixed-length equation solver (Z3str3 only)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.overlap_priority"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true"),(0,l.kt)("td",{parentName:"tr",align:null},"-0.1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_difficulty_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"difficulty threshold for regex automata heuristics"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_failed_automaton_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of failed automaton construction attempts after which a full automaton is automatically built"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_failed_intersection_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of failed automaton intersection attempts after which intersection is always computed"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_intersection_difficulty_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"difficulty threshold for regex intersection heuristics"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_length_attempt_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of length/path constraint attempts before checking unsatisfiability of regex terms"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.string_constant_cache"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"cache all generated string constants generated from anywhere in theory_str"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.strong_arrangements"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"assert equivalences instead of implications when generating string arrangement axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"string_solver"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver)"),(0,l.kt)("td",{parentName:"tr",align:null},"seq")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"theory_aware_branching"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Allow the context to use extra information from theory solvers regarding literal branching prioritization."),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"theory_case_split"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead."),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of parallel threads."),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads.cube_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"frequency for using cubing"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads.max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of conflicts between rounds of cubing for parallel SMT"),(0,l.kt)("td",{parentName:"tr",align:null},"400")))),(0,l.kt)("h2",{id:"sls"},"sls"),(0,l.kt)("p",null,"Experimental Stochastic Local Search Solver (for QFBV only)."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"early_prune"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use early pruning for score prediction"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_memory"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum amount of memory in megabytes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"paws_init"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial/minimum assertion weights"),(0,l.kt)("td",{parentName:"tr",align:null},"40")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"paws_sp"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"smooth assertion weights with probability paws_sp / 1024"),(0,l.kt)("td",{parentName:"tr",align:null},"52")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_offset"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use random offset for candidate evaluation"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random seed"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rescore"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"rescore/normalize top-level score every base restart interval"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart_base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"base restart interval given by moves per run"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart_init"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"initialize to 0 or random value (= 1) after restart"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"scale_unsat"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"scale score of unsat expressions by this factor"),(0,l.kt)("td",{parentName:"tr",align:null},"0.5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"track_unsat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"keep a list of unsat assertions as done in SAT - currently disabled internally"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"vns_mc"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"in local minima, try Monte Carlo sampling vns_mc many 2-bit-flips per bit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"vns_repick"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"in local minima, try picking a different assertion (only for walksat)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use walksat assertion selection (instead of gsat)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_repick"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"repick assertion if randomizing in local minima"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use bandit heuristic for walksat assertion selection (instead of random)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb_constant"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"the ucb constant c in the term score + c * f(touched)"),(0,l.kt)("td",{parentName:"tr",align:null},"20.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb_forget"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"scale touched by this factor every base restart interval"),(0,l.kt)("td",{parentName:"tr",align:null},"1.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb_init"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"initialize total ucb touched to formula size"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb_noise"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"add noise 0 ","<","= 256 * ucb_noise to ucb score for assertion selection"),(0,l.kt)("td",{parentName:"tr",align:null},"0.0002")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"wp"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random walk with probability wp / 1024"),(0,l.kt)("td",{parentName:"tr",align:null},"100")))))}o.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b4ec11a8.e39a8d3e.js b/assets/js/b4ec11a8.e39a8d3e.js new file mode 100644 index 000000000..806347782 --- /dev/null +++ b/assets/js/b4ec11a8.e39a8d3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[843],{6524:(t,a,e)=>{e.r(a),e.d(a,{assets:()=>d,contentTitle:()=>i,default:()=>o,frontMatter:()=>r,metadata:()=>m,toc:()=>p});var n=e(7462),l=(e(7294),e(3905));e(7634);const r={},i=void 0,m={unversionedId:"Parameters",id:"Parameters",title:"Parameters",description:"Z3 Options",source:"@site/docs-programming/04 - Parameters.md",sourceDirName:".",slug:"/Parameters",permalink:"/z3guide/programming/Parameters",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-programming/04 - Parameters.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"MBQI",permalink:"/z3guide/programming/Example Programs/MBQI"},next:{title:"API Reference",permalink:"/z3guide/programming/API Reference"}},d={},p=[{value:"Global Parameters",id:"global-parameters",level:2},{value:"pi",id:"pi",level:2},{value:"tactic",id:"tactic",level:2},{value:"pp",id:"pp",level:2},{value:"sat",id:"sat",level:2},{value:"solver",id:"solver",level:2},{value:"opt",id:"opt",level:2},{value:"parallel",id:"parallel",level:2},{value:"nnf",id:"nnf",level:2},{value:"algebraic",id:"algebraic",level:2},{value:"combined_solver",id:"combined_solver",level:2},{value:"rcf",id:"rcf",level:2},{value:"ackermannization",id:"ackermannization",level:2},{value:"nlsat",id:"nlsat",level:2},{value:"fp",id:"fp",level:2},{value:"smt",id:"smt",level:2},{value:"sls",id:"sls",level:2}],u={toc:p};function o(t){let{components:a,...e}=t;return(0,l.kt)("wrapper",(0,n.Z)({},u,e,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"Z3 Options"),(0,l.kt)("h2",{id:"global-parameters"},"Global Parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"auto_config"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use heuristics to automatically select solver and configure it"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"debug_ref_count"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"debug support for AST reference counting"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dot_proof_file"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"file in which to output graphical proofs"),(0,l.kt)("td",{parentName:"tr",align:null},"proof.dot")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dump_models"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dump models whenever check-sat returns sat"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"encoding"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"string encoding used internally: unicode"),(0,l.kt)("td",{parentName:"tr",align:null},"bmp")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"memory_high_watermark"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set high watermark for memory consumption (in bytes), if 0 then there is no limit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"memory_high_watermark_mb"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set high watermark for memory consumption (in megabytes), if 0 then there is no limit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"memory_max_alloc_count"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set hard upper limit for memory allocations, if 0 then there is no limit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"memory_max_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set hard upper limit for memory consumption (in megabytes), if 0 then there is no limit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"model"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"model generation for solvers, this parameter can be overwritten when creating a solver"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"model_validate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"validate models produced by solvers"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"proof generation, it must be enabled when the Z3 context is created"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rlimit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"default resource limit used for solvers. Unrestricted when set to 0."),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smtlib2_compliant"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable/disable SMT-LIB 2.0 compliance"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"stats"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable/disable statistics"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"(default: infty) timeout in milliseconds."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"trace"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"trace generation for VCC"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"trace_file_name"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"trace out file name (see option 'trace')"),(0,l.kt)("td",{parentName:"tr",align:null},"z3.log")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"type_check"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"type checker (alias for well_sorted_check)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"unsat_core"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"unsat-core generation for solvers, this parameter can be overwritten when creating a solver, not every solver in Z3 supports unsat core generation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"verbose"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"be verbose, where the value is the verbosity level"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"warning"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable/disable warning messages"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"well_sorted_check"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"type checker"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"pi"},"pi"),(0,l.kt)("p",null,"pattern inference (heuristics) for universal formulas (without annotation)"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - do not infer patterns with arithmetic terms, 1 - use patterns with arithmetic terms if there is no other pattern, 2 - always use patterns with arithmetic terms"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith_weight"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"default weight for quantifiers where the only available pattern has nested arithmetic terms"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"block_loop_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"block looping patterns during pattern inference"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_multi_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"when patterns are not provided, the prover uses a heuristic to infer them, this option sets the threshold on the number of extra multi-patterns that can be created; by default, the prover creates at most one multi-pattern when there is no unary pattern"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"non_nested_arith_weight"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"default weight for quantifiers where the only available pattern has non nested arithmetic terms"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pull_quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pull nested quantifiers, if no pattern was found"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"use_database"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use pattern database"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"warnings"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable/disable warning messages in the pattern inference module"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"tactic"},"tactic"),(0,l.kt)("p",null,"tactic parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"blast_term_ite.max_inflation"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"multiplicative factor of initial term size."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"blast_term_ite.max_steps"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of steps allowed for tactic."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"default_tactic"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"overwrite default tactic in strategic solver"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"propagate_values.max_rounds"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of rounds to propagate values."),(0,l.kt)("td",{parentName:"tr",align:null},"4")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs.context_solve"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"solve equalities within disjunctions."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs.ite_solver"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use if-then-else solvers."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs.max_occs"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of occurrences for considering a variable for Gaussian eliminations."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs.theory_solver"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use theory solvers."),(0,l.kt)("td",{parentName:"tr",align:null},"true")))),(0,l.kt)("h2",{id:"pp"},"pp"),(0,l.kt)("p",null,"pretty printer"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bounded"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"ignore characters exceeding max width"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv_literals"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use Bit-Vector literals (e.g, #x0F and #b0101) during pretty printing"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv_neg"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use bvneg when displaying Bit-Vector literals where the most significant bit is 1"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"decimal"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pretty print real numbers using decimal notation (the output may be truncated). Z3 adds a ? if the value is not precise"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"decimal_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of decimal places to be used when pp.decimal=true"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"fixed_indent"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use a fixed indentation for applications"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"flat_assoc"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"flat associative operators (when pretty printing SMT2 terms/formulas)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"fp_real_literals"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use real-numbered floating point literals (e.g, +1.0p-1) during pretty printing"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. term depth (when pretty printing SMT2 terms/formulas)"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_indent"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. indentation in pretty printer"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_num_lines"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. number of lines to be displayed in pretty printer"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_ribbon"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. ribbon (width - indentation) in pretty printer"),(0,l.kt)("td",{parentName:"tr",align:null},"80")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_width"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"max. width in pretty printer"),(0,l.kt)("td",{parentName:"tr",align:null},"80")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"min_alias_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"min. size for creating an alias for a shared term (when pretty printing SMT2 terms/formulas)"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pretty_proof"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use slower, but prettier, printer for proofs"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify_implies"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify nested implications for pretty printing"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"single_line"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"ignore line breaks when true"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"sat"},"sat"),(0,l.kt)("p",null,"propositional SAT solver"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"abce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate blocked clauses using asymmetric literals"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"acce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate covered clauses using asymmetric added literals"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"anf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable ANF based simplification in-processing"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"anf.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay ANF simplification by in-processing round"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"anf.exlin"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable extended linear simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"asymmetric branching"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.all"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"asymmetric branching on all literals per clause"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of simplification rounds to wait until invoking asymmetric branch simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"approx. maximum number of literals visited during asymmetric branching"),(0,l.kt)("td",{parentName:"tr",align:null},"100000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.rounds"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of rounds to run asymmetric branch simplifications if progress is made"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"asymm_branch.sampled"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use sampling based asymmetric branching based on binary implication graph"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"asymmetric tautology elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"backtrack.conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts before enabling chronological backtracking"),(0,l.kt)("td",{parentName:"tr",align:null},"4000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"backtrack.scopes"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of scopes to enable chronological backtracking"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bca"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"blocked clause addition - add blocked binary clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate blocked clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bce_at"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate blocked clauses only once at the given simplification round"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bce_delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay eliminate blocked clauses until simplification round"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"binspr"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable SPR inferences of binary propagation redundant clauses. This inprocessing step eliminates models"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"blocked_clause_limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of literals visited during blocked clause elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"100000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"branching.anti_exploration"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply anti-exploration heuristic for branch selection"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"branching.heuristic"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"branching heuristic vsids, chb"),(0,l.kt)("td",{parentName:"tr",align:null},"vsids")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"burst_search"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts before first global simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cardinality.encoding"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit"),(0,l.kt)("td",{parentName:"tr",align:null},"grouped")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cardinality.solver"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use cardinality solver"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate covered clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.minimize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize computed core"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.minimize_partial"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply partial (cheap) core minimization"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable AIG based simplification in-processing"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.aig"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract aigs (and ites) from clauses for cut simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay cut simplification by in-processing round"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.dont_cares"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"integrate dont cares with cuts"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.force"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"force redoing cut-enumeration until a fixed-point"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.lut"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract luts from clauses for cut simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.npn3"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract 3 input functions from clauses for cut simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.redundancies"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"integrate redundancy checking of cuts"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cut.xor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract xors from clauses for cut simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.init_clause_weight"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial clause weight for DDFW local search"),(0,l.kt)("td",{parentName:"tr",align:null},"8")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.reinit_base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"increment basis for geometric backoff scheme of re-initialization of weights"),(0,l.kt)("td",{parentName:"tr",align:null},"10000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.restart_base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of flips used a starting point for hesitant restart backoff"),(0,l.kt)("td",{parentName:"tr",align:null},"100000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.threads"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of ddfw threads to run in parallel with sat solver"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw.use_reward_pct"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"percentage to pick highest reward variable when it has reward 0"),(0,l.kt)("td",{parentName:"tr",align:null},"15")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ddfw_search"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use ddfw local search instead of CDCL"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dimacs.core"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract core from DIMACS benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.activity"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dump variable activities"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.binary"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use Binary DRAT output format"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.check_sat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"build up internal trace, check satisfying model"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.check_unsat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"build up internal proof and check"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.disable"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"override anything that enables DRAT"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"drat.file"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"file to dump DRAT proofs"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dyn_sub_res"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dynamic subsumption resolution for minimizing learned clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_vars"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable variable elimination using resolution during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_vars_bdd"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable variable elimination using BDD recompilation during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_vars_bdd_delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay elimination of variables using BDDs until after simplification round"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_pre_simplify"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable pre simplifications before the bounded search"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"euf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable euf solver (this feature is preliminary and not ready for general consumption)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"force_cleanup"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"force cleanup to remove tautologies and simplify clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"garbage collection strategy: psm, glue, glue_psm, dyn_psm"),(0,l.kt)("td",{parentName:"tr",align:null},"glue_psm")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.burst"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"perform eager garbage collection during initialization"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.defrag"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"defragment clauses when garbage collecting"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.increment"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"increment to the garbage collection threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"500")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.initial"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"learned clauses garbage collection frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"20000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.k"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm)"),(0,l.kt)("td",{parentName:"tr",align:null},"7")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gc.small_lbd"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"learned clauses with small LBD are never deleted (only used in dyn_psm)"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inprocess.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of inprocessing passes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inprocess.out"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"file to dump result of the first inprocessing step and exit"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"local_search"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use local search instead of CDCL"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"local_search_dbg_flips"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"write debug information for number of flips"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"local_search_mode"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"local search algorithm, either default wsat or qsat"),(0,l.kt)("td",{parentName:"tr",align:null},"wsat")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"local_search_threads"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of local search threads to find satisfiable solution"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.cutoff"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat"),(0,l.kt)("td",{parentName:"tr",align:null},"depth")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth."),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.fraction"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat"),(0,l.kt)("td",{parentName:"tr",align:null},"0.4")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.freevars"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"cube free variable fraction. Used when lookahead.cube.cutoff is freevars"),(0,l.kt)("td",{parentName:"tr",align:null},"0.8")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.psat.clause_base"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"clause base for PSAT cutoff"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.psat.trigger"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.cube.psat.var_exp"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"free variable exponent for PSAT cutoff"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.delta_fraction"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"number between 0 and 1, the smaller the more literals are selected for double lookahead"),(0,l.kt)("td",{parentName:"tr",align:null},"1.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.double"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable double lookahead"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.global_autarky"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prefer to branch on variables that occur in clauses that are reduced"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.preselect"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use pre-selection of subset of variables for branching"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.reward"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu"),(0,l.kt)("td",{parentName:"tr",align:null},"march_cu")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead.use_learned"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use learned clauses when selecting lookahead literal"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead_scores"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extract lookahead scores. A utility that can only be used from the DIMACS front-end"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead_simplify"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use lookahead solver during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lookahead_simplify.bca"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"add learned binary clauses as part of lookahead simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_memory"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum amount of memory in megabytes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"minimize_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize learned clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"override_incremental"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"override incremental safety gaps. Enable elimination of blocked clauses and variables even if solver is reused"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.lemma_format"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"generate either cardinality or pb lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"cardinality")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.min_arity"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"minimal arity to compile pb/cardinality constraints to CNF"),(0,l.kt)("td",{parentName:"tr",align:null},"9")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.resolve"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"resolution strategy for boolean algebra solver: cardinality, rounding"),(0,l.kt)("td",{parentName:"tr",align:null},"cardinality")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.solver"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), binary_merge, segmented, solver (use native solver)"),(0,l.kt)("td",{parentName:"tr",align:null},"solver")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"phase selection strategy: always_false, always_true, basic_caching, random, caching"),(0,l.kt)("td",{parentName:"tr",align:null},"caching")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase.sticky"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use sticky phase caching"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"prob_search"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use probsat local search instead of CDCL"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply failed literal detection during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing_binary"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"probe binary clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing_cache"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"add binary literals as lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing_cache_limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"cache binaries unless overall memory usage exceeds cache limit"),(0,l.kt)("td",{parentName:"tr",align:null},"1024")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"probing_limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"limit to the number of probe calls"),(0,l.kt)("td",{parentName:"tr",align:null},"5000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"propagate.prefetch"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prefetch watch lists for assigned literals"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_freq"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"frequency of random case splits"),(0,l.kt)("td",{parentName:"tr",align:null},"0.01")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random seed"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"reorder.activity_scale"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"scaling factor for activity update"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"reorder.base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts per random reorder"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"reorder.itau"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"inverse temperature for softmax"),(0,l.kt)("td",{parentName:"tr",align:null},"4.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rephase.base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts per rephase"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.cls_cutoff1"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"limit1 - total number of problems clauses for the second cutoff of Boolean variable elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"100000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"limit2 - total number of problems clauses for the second cutoff of Boolean variable elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"700000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"approx. maximum number of literals visited during variable elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"500000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.lit_cutoff_range1"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (total number of literals) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"700")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.lit_cutoff_range2"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"400")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.lit_cutoff_range3"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (total number of literals) for Boolean variable elimination, for problems containing more than res_cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"300")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.occ_cutoff"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"first cutoff (on number of positive/negative occurrences) for Boolean variable elimination"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.occ_cutoff_range1"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing less than res_cls_cutoff1 clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"8")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.occ_cutoff_range2"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff1 and less than res_cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"resolution.occ_cutoff_range3"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"second cutoff (number of positive/negative occurrences) for Boolean variable elimination, for problems containing more than res_cls_cutoff2"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"restart strategy: static, luby, ema or geometric"),(0,l.kt)("td",{parentName:"tr",align:null},"ema")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.emafastglue"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"ema alpha factor for fast moving average"),(0,l.kt)("td",{parentName:"tr",align:null},"0.03")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.emaslowglue"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"ema alpha factor for slow moving average"),(0,l.kt)("td",{parentName:"tr",align:null},"1e-05")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.factor"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"restart increment factor for geometric strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"1.5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.fast"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use fast restart approach only removing less active literals."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.initial"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial restart (number of conflicts)"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.margin"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"margin between fast and slow restart factors. For ema"),(0,l.kt)("td",{parentName:"tr",align:null},"1.1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of restarts."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"retain_blocked_clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"retain blocked clauses as lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"scc"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate Boolean variables by computing strongly connected components"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"scc.tr"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply transitive reduction, eliminate redundant binary clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"search.sat.conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"period for solving for sat (in number of conflicts)"),(0,l.kt)("td",{parentName:"tr",align:null},"400")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"search.unsat.conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"period for solving for unsat (in number of conflicts)"),(0,l.kt)("td",{parentName:"tr",align:null},"400")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"set initial delay of simplification by a conflict count"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smt"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use the SAT solver based incremental SMT core"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smt.proof.check"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"check SMT proof while it is created"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smt.proof.check_rup"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"apply forward RUP proof checking"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"subsumption"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate subsumed clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"subsumption.limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"approx. maximum number of literals visited during subsumption (and subsumption resolution)"),(0,l.kt)("td",{parentName:"tr",align:null},"100000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of parallel threads to use"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"variable_decay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"multiplier (divided by 100) for the VSIDS activity increment"),(0,l.kt)("td",{parentName:"tr",align:null},"110")))),(0,l.kt)("h2",{id:"solver"},"solver"),(0,l.kt)("p",null,"solver parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"axioms2files"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print negated theory axioms to separate files during search"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cancel_backup_file"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"file to save partial search state if search is canceled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"instantiations2console"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print quantifier instantiations to the console"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lemmas2console"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print lemmas during search"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof.check"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"check proof logs"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof.log"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"log clause proof trail into a file"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof.save"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"save proof log into a proof object that can be extracted using (get-proof)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"proof.trim"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"trim and save proof into a proof object that an be extracted using (get-proof)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"smtlib2_log"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"file to save solver interaction"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"timeout on the solver object; overwrites a global timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")))),(0,l.kt)("h2",{id:"opt"},"opt"),(0,l.kt)("p",null,"optimization parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dump_benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dump benchmarks for profiling"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dump_models"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"display intermediary models to stdout"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_01"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate 01 variables"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_core_rotate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable core rotation to both sample cores and correction sets"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_lns"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable LNS during weighted maxsat"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_sat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable the new SAT core for propositional constraints"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable_sls"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable SLS tuning during weighted maxsat"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"incremental"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"set incremental mode. It disables pre-processing and enables adding constraints in model event handler"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lns_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial conflict count for LNS search"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxlex.enable"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable maxlex heuristic for lexicographic MaxSAT problems"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.add_upper_bound_block"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"restrict upper bound with constraint"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.hill_climb"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"give preference for large weight cores"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.max_core_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"break batch of generated cores if size reaches this number"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.max_correction_set_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"allow generating correction set constraints up to maximal size"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.max_num_cores"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of cores per round"),(0,l.kt)("td",{parentName:"tr",align:null},"200")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.maximize_assignment"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"find an MSS/MCS to improve current assignment"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.pivot_on_correction_set"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"reduce soft constraints if the current correction set is smaller than current core"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxres.wmax"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use weighted theory solver to constrain upper bounds"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"maxsat_engine"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"select engine for maxsat: 'core_maxsat', 'wmax', 'maxres', 'pd-maxres', 'maxres-bin', 'rc2'"),(0,l.kt)("td",{parentName:"tr",align:null},"maxres")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"optsmt_engine"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"select optimization engine: 'basic', 'symba'"),(0,l.kt)("td",{parentName:"tr",align:null},"basic")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.compile_equality"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"compile arithmetical equalities into pseudo-Boolean equality (instead of two inequalities)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pp.neat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use neat (as opposed to less readable, but faster) pretty printer when displaying context"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pp.wcnf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print maxsat benchmark into wcnf format"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"priority"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"select how to prioritize objectives: 'lex' (lexicographic), 'pareto', 'box'"),(0,l.kt)("td",{parentName:"tr",align:null},"lex")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rc2.totalizer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use totalizer for rc2 encoding"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rlimit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"resource limit (0 means no limit)"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solution_prefix"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"path prefix to dump intermediary, but non-optimal, solutions"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"timeout (in milliseconds) (UINT_MAX and 0 mean no timeout)"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")))),(0,l.kt)("h2",{id:"parallel"},"parallel"),(0,l.kt)("p",null,"parameters for parallel solver"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"conquer.backtrack_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"frequency to apply core minimization during conquer"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"conquer.batch_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of cubes to batch together for fast conquer"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"conquer.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"delay of cubes until applying conquer"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"conquer.restart.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of restarts during conquer phase"),(0,l.kt)("td",{parentName:"tr",align:null},"5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"enable"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable parallel solver by default on selected tactics (for QF_BV)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.exp"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"restart and inprocess max is multiplied by simplify.exp ^ depth"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.inprocess.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of inprocessing steps during simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of conflicts during simplification phase"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify.restart.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of restarts during simplification phase"),(0,l.kt)("td",{parentName:"tr",align:null},"5000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"caps maximal number of threads below the number of processors"),(0,l.kt)("td",{parentName:"tr",align:null},"10000")))),(0,l.kt)("h2",{id:"nnf"},"nnf"),(0,l.kt)("p",null,"negation normal form"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ignore_labels"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"remove/ignore labels in the input formula, this option is ignored if proofs are enabled"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_memory"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum amount of memory in megabytes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mode"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"NNF translation mode: skolem (skolem normal form), quantifiers (skolem normal form + quantifiers in NNF), full"),(0,l.kt)("td",{parentName:"tr",align:null},"skolem")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sk_hack"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"hack for VCC"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"algebraic"},"algebraic"),(0,l.kt)("p",null,"real algebraic number package. Non-default parameter settings are not supported"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use polynomial factorization to simplify polynomials representing algebraic numbers"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor_max_prime"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter limits the maximum prime number p to be used in the first step"),(0,l.kt)("td",{parentName:"tr",align:null},"31")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor_num_primes"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. The search space may be reduced by factoring the polynomial in different GF(p)'s. This parameter specify the maximum number of finite factorizations to be considered, before lifting and searching"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor_search_size"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"parameter for the polynomial factorization procedure in the algebraic number module. Z3 polynomial factorization is composed of three steps: factorization in GF(p), lifting and search. This parameter can be used to limit the search space"),(0,l.kt)("td",{parentName:"tr",align:null},"5000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"min_mag"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Z3 represents algebraic numbers using a (square-free) polynomial p and an isolating interval (which contains one and only one root of p). This interval may be refined during the computations. This parameter specifies whether to cache the value of a refined interval or not. It says the minimal size of an interval for caching purposes is 1/2^16"),(0,l.kt)("td",{parentName:"tr",align:null},"16")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"zero_accuracy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"one of the most time-consuming operations in the real algebraic number module is determining the sign of a polynomial evaluated at a sample point with non-rational algebraic number values. Let k be the value of this option. If k is 0, Z3 uses precise computation. Otherwise, the result of a polynomial evaluation is considered to be 0 if Z3 can show it is inside the interval (-1/2^k, 1/2^k)"),(0,l.kt)("td",{parentName:"tr",align:null},"0")))),(0,l.kt)("h2",{id:"combined_solver"},"combined_solver"),(0,l.kt)("p",null,"combines two solvers: non-incremental (solver1) and incremental (solver2)"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ignore_solver1"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, solver 2 is always used"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solver2_timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"fallback to solver 1 after timeout even when in incremental model"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solver2_unknown"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"what should be done when solver 2 returns unknown: 0 - just return unknown, 1 - execute solver 1 if quantifier free problem, 2 - execute solver 1"),(0,l.kt)("td",{parentName:"tr",align:null},"1")))),(0,l.kt)("h2",{id:"rcf"},"rcf"),(0,l.kt)("p",null,"real closed fields"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"clean_denominators"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"clean denominators before root isolation"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inf_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"a value k that is the initial interval size (i.e., (0, 1/2^l)) used as an approximation for infinitesimal values"),(0,l.kt)("td",{parentName:"tr",align:null},"24")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"initial_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"a value k that is the initial interval size (as 1/2^k) when creating transcendentals and approximated division"),(0,l.kt)("td",{parentName:"tr",align:null},"24")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lazy_algebraic_normalization"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"during sturm-seq and square-free polynomial computations, only normalize algebraic polynomial expressions when the defining polynomial is monic"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"during sign determination we switch from interval arithmetic to complete methods when the interval size is less than 1/2^k, where k is the max_precision"),(0,l.kt)("td",{parentName:"tr",align:null},"128")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"use_prem"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use pseudo-remainder instead of remainder when computing GCDs and Sturm-Tarski sequences"),(0,l.kt)("td",{parentName:"tr",align:null},"true")))),(0,l.kt)("h2",{id:"ackermannization"},"ackermannization"),(0,l.kt)("p",null,"solving UF via ackermannization"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"eager"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eagerly instantiate all congruence rules"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inc_sat_backend"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use incremental SAT"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sat_backend"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use SAT rather than SMT in qfufbv_ackr_tactic"),(0,l.kt)("td",{parentName:"tr",align:null},"false")))),(0,l.kt)("h2",{id:"nlsat"},"nlsat"),(0,l.kt)("p",null,"nonlinear solver"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"check_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"check lemmas on the fly using an independent nlsat solver"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"factor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"factor polynomials produced during conflict resolution."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"inline_vars"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"inline variables that can be isolated from equations (not supported in incremental mode)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lazy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"how lazy the solver is."),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"log_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"display lemmas as self-contained SMT formulas"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of conflicts."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_memory"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum amount of memory in megabytes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"minimize_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"randomize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"randomize selection of a witness in nlsat."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"reorder"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"reorder variables."),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random seed."),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"shuffle_vars"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use a random variable order."),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"simplify_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify conflicts using equalities before resolving them in nlsat solver."),(0,l.kt)("td",{parentName:"tr",align:null},"true")))),(0,l.kt)("h2",{id:"fp"},"fp"),(0,l.kt)("p",null,"fixedpoint parameters"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bmc.linear_unrolling_depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximal level to explore"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.all_or_nothing_deltas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"compile rules so that it is enough for the delta relation in union and widening operations to determine only whether the updated relation was modified or not"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.check_relation"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"name of default relation to check. operations on the default relation will be verified using SMT solving"),(0,l.kt)("td",{parentName:"tr",align:null},"null")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.compile_with_widening"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"widening will be used to compile recursive rules"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.dbg_fpr_nonempty_relation_signature"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, finite_product_relation will attempt to avoid creating inner relation with empty signature by putting in half of the table columns, if it would have been empty otherwise"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.default_relation"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"default relation implementation: external_relation, pentagon"),(0,l.kt)("td",{parentName:"tr",align:null},"pentagon")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.default_table"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"default table implementation: sparse, hashtable, bitvector, interval"),(0,l.kt)("td",{parentName:"tr",align:null},"sparse")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.default_table_checked"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, the default table will be default_table inside a wrapper that checks that its results are the same as of default_table_checker table"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.default_table_checker"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"see default_table_checked"),(0,l.kt)("td",{parentName:"tr",align:null},"null")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.explanations_on_relation_level"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, explanations are generated as history of each relation, rather than per fact (generate_explanations must be set to true for this option to have any effect)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.generate_explanations"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"produce explanations for produced facts when using the datalog engine"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.initial_restart_timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"length of saturation run before the first restart (in ms), zero means no restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.magic_sets_for_queries"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"magic set transformation will be used for queries"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.output_profile"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"determines whether profile information should be output when outputting Datalog rules or instructions"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.print.tuples"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"determines whether tuples for output predicates should be output"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.profile_timeout_milliseconds"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"instructions and rules that took less than the threshold will not be printed when printed the instruction/rule list"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.similarity_compressor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"rules that differ only in values of constants will be merged into a single rule"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.similarity_compressor_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"if similarity_compressor is on, this value determines how many similar rules there must be in order for them to be merged"),(0,l.kt)("td",{parentName:"tr",align:null},"11")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.subsumption"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true, removes/filters predicates with total transitions"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.timeout"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Time limit used for saturation"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.unbound_compressor"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"auxiliary relations will be introduced to avoid unbound variables in rule heads"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"datalog.use_map_names"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use names from map files when displaying tuples"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"engine"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"Select: auto-config, datalog, bmc, spacer"),(0,l.kt)("td",{parentName:"tr",align:null},"auto-config")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"generate_proof_trace"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"trace for 'sat' answer as proof object"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_aig"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"Dump clauses in AIG text format (AAG) to the given file name"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_answer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print answer instance(s) to query"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_boogie_certificate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print certificate for reachability or non-reachability using a format understood by Boogie"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_certificate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print certificate for reachability or non-reachability"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_fixedpoint_extensions"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use SMT-LIB2 fixedpoint extensions, instead of pure SMT2, when printing rules"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_low_level_smt2"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use (faster) low-level SMT2 printer (the printer is scalable but the result may not be as readable)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_statistics"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print statistics"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"print_with_variable_declarations"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use variable declarations when displaying rules (instead of attempting to use original names)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.arith.solver"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.blast_term_ite_inflation"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximum inflation for non-Boolean ite-terms expansion: 0 (none), k (multiplicative)"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.ctp"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable counterexample-to-pushing"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.dump_benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Dump SMT queries as benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.dump_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"Threshold in seconds on dumping benchmarks"),(0,l.kt)("td",{parentName:"tr",align:null},"5.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.elim_aux"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Eliminate auxiliary variables in reachability facts"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.eq_prop"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable equality and bound propagation in arithmetic"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.expand_bnd"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable expand-bound lemma generalization"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gg.concretize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable global guidance concretize"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gg.conjecture"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable global guidance conjecture"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gg.subsume"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable global guidance subsume"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.global"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable global guidance"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gpdr"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use GPDR solving strategy for non-linear CHC"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.gpdr.bfs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use BFS exploration strategy for expanding model search"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.ground_pobs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Ground pobs by using values from a model"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 = use old implementation of unsat-core-generation, 1 = use new implementation of IUC generation, 2 = use new implementation of IUC + min-cut optimization"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.arith"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 = use simple Farkas plugin, 1 = use simple Farkas plugin with constant from other partition (like old unsat-core-generation),2 = use Gaussian elimination optimization (broken), 3 = use additive IUC plugin"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.debug_proof"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prints proof used by unsat-core-learner for debugging purposes (debugging)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.old_hyp_reducer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use old hyp reducer instead of new implementation, for debugging only"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.print_farkas_stats"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prints for each proof how many Farkas lemmas it contains and how many of these participate in the cut (for debugging)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.iuc.split_farkas_literals"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Split Farkas literals"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.keep_proxy"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"keep proxy variables (internal parameter)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.logic"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"SMT-LIB logic to configure internal SMT solvers"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.max_level"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximum level to explore"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.max_num_contexts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of contexts to create"),(0,l.kt)("td",{parentName:"tr",align:null},"500")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.mbqi"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable mbqi"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.min_level"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Minimal level to explore"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.native_mbp"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use native mbp of Z3"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.order_children"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: order of enqueuing children in non-linear rules : 0 (original), 1 (reverse), 2 (random)"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.p3.share_invariants"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Share invariants lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.p3.share_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Share frame lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.propagate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable propagate/pushing phase"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.push_pob"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"push blocked pobs to higher level"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.push_pob_max_depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximum depth at which push_pob is enabled"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.q3"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Allow quantified lemmas in frames"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.q3.instantiate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Instantiate quantified lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.q3.qgen.normalize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"normalize cube before quantified generalization"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.q3.use_qgen"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use quantified lemma generalizer"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.random_seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Random seed to be used by SMT solver"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.reach_dnf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Restrict reachability facts to DNF"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.reset_pob_queue"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: reset pob obligation queue when entering a new level"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.restart_initial_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Initial threshold for restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable resetting obligation queue"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.simplify_lemmas_post"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify derived lemmas after inductive propagation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.simplify_lemmas_pre"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify derived lemmas before inductive propagation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.simplify_pob"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify pobs by removing redundant constraints"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.trace_file"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"Log file for progress events"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_array_eq_generalizer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: attempt to generalize lemmas with array equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_bg_invs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable external background invariants"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_derivations"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: using derivation mechanism to cache intermediate results for non-linear rules"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_euf_gen"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Generalize lemmas and pobs using implied equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_inc_clause"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use incremental clause to represent trans"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_inductive_generalizer"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"generalize lemmas using induction strengthening"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_iuc"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable Interpolating Unsat Core(IUC) for lemma generalization"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_lemma_as_cti"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"SPACER: use a lemma instead of a CTI in flexible_trace"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.use_lim_num_gen"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable limit numbers generalizer to get smaller numbers"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.validate_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Validate each lemma after generalization"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"spacer.weak_abs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Weak abstraction"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"tab.selection"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"selection method for tabular strategy: weight (default), first, var-use"),(0,l.kt)("td",{parentName:"tr",align:null},"weight")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"validate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"validate result (by proof checking or model checking)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.array_blast"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try to eliminate local array terms using Ackermannization -- some array terms may remain"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.array_blast_full"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eliminate all local array variables by QE"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.bit_blast"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"bit-blast bit-vectors"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.coalesce_rules"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"coalesce rules"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.coi"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use cone of influence simplification"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.compress_unbound"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"compress tails with unbound variables"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.elim_term_ite"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Eliminate term-ite expressions"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.elim_term_ite.inflation"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Maximum inflation for non-Boolean ite-terms blasting: 0 (none), k (multiplicative)"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.fix_unbound_vars"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"fix unbound variables in tail"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.inline_eager"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try eager inlining of rules"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.inline_linear"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try linear inlining method"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.inline_linear_branch"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try linear inlining method with potential expansion"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_arrays"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Transforms P(a) into P(i, a","[i]"," a)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_arrays.enforce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Transforms P(a) into P(i, a","[i]","), discards a from predicate"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_arrays.nb_quantifier"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Gives the number of quantifiers per array"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_arrays.slice_technique"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"<","no-slicing",">","=",">"," GetId(i) = i, ","<","smash",">"," =",">"," GetId(i) = true"),(0,l.kt)("td",{parentName:"tr",align:null},"no-slicing")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.instantiate_quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"instantiate quantified Horn clauses using E-matching heuristic"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.magic"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"perform symbolic magic set transformation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.quantify_arrays"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"create quantified Horn clauses from clauses with arrays"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.scale"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"add scaling variable to linear real arithmetic clauses"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.slice"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"simplify clause set using slicing"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.subsumption_checker"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Enable subsumption checker (no support for model conversion)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.tail_simplifier_pve"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"propagate_variable_equivalences"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.transform_arrays"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Rewrites arrays equalities and applies select over store"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xform.unfold_rules"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"unfold rules statically using iterative squaring"),(0,l.kt)("td",{parentName:"tr",align:null},"0")))),(0,l.kt)("h2",{id:"smt"},"smt"),(0,l.kt)("p",null,"smt solver based on lazy smt"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.auto_config_simplex"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"force simplex solver in auto_config"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.bprop_on_pivoted_rows"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"propagate bounds on rows changed by the pivot operation"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.branch_cut_ratio"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"branch/cut ratio for linear integer arithmetic"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.dump_lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"dump arithmetic theory lemmas to files"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.eager_eq_axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"eager equality axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.enable_hnf"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable hnf (Hermite Normal Form) cuts"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.greatest_error_pivot"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Pivoting strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.ignore_int"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"treat integer variables as real"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.int_eq_branch"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"branching using derived integer equations"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.min"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize cost"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"(incomplete) nonlinear arithmetic support based on Groebner basis and interval propagation, relevant only if smt.arith.solver=2"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.branching"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"branching on integer variables in non linear clusters, relevant only if smt.arith.solver=2"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of calls to final check before invoking bounded nlsat check"),(0,l.kt)("td",{parentName:"tr",align:null},"500")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.expp"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"expensive patching"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.gr_q"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's quota"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"run grobner's basis heuristic"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_cnfl_to_report"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's maximum number of conflicts to report"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_eqs_growth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's number of equalities growth"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_expr_degree_growth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's maximum expr degree growth"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_expr_size_growth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's maximum expr size growth"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's call frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"4")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_max_simplified"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"grobner's maximum number of simplifications"),(0,l.kt)("td",{parentName:"tr",align:null},"10000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.grobner_subs_fixed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - no subs, 1 - substitute, 2 - substitute fixed zeros only"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.horner"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"run horner's heuristic"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.horner_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"horner's call frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"4")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.horner_row_length_limit"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"row is disregarded by the heuristic if its length is longer than the value"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.horner_subs_fixed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - no subs, 1 - substitute, 2 - substitute fixed zeros only"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.nra"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"call nra_solver when incremental linearization does not produce a lemma, this option is ignored when arith.nl=false, relevant only if smt.arith.solver=6"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.order"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"run order lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.rounds"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"threshold for number of (nested) final checks for non linear arithmetic, relevant only if smt.arith.solver=2"),(0,l.kt)("td",{parentName:"tr",align:null},"1024")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.nl.tangents"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"run tangent lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.print_ext_var_names"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print external variable names"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.print_stats"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"print statistic"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.propagate_eqs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"propagate (cheap) equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.propagation_mode"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - no propagation, 1 - propagate existing literals, 2 - refine finite bounds"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.random_initial_value"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use random initial values in the simplex-based procedure for linear arithmetic"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.rep_freq"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"the report frequency, in how many iterations print the cost and other info"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.simplex_strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"simplex strategy for the solver"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"arith.solver"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"arithmetic solver: 0 - no solver, 1 - bellman-ford based solver (diff. logic only), 2 - simplex based solver, 3 - floyd-warshall based solver (diff. logic only) and no theory combination 4 - utvpi, 5 - infinitary lra, 6 - lra solver"),(0,l.kt)("td",{parentName:"tr",align:null},"6")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"array.extensional"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extensional array theory"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"array.weak"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"weak array theory"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"auto_config"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"automatically configure solver"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.delay"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"delay internalize expensive bit-vector operations"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.enable_int2bv"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable support for int2bv and bv2int operators"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.eq_axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable redundant equality axioms for bit-vectors"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.reflect"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"create enode for every bit-vector term"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.size_reduce"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing; turn assertions that set the upper bits of a bit-vector to constants into a substitution that replaces the bit-vector with constant bits. Useful for minimizing circuits as many input bits to circuits are constant"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bv.watch_diseq"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use watch lists instead of eager axioms for bit-vectors"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"candidate_models"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"create candidate models even when quantifier or theory reasoning is incomplete"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"case_split"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - case split based on variable activity, 1 - similar to 0, but delay case splits created during the search, 2 - similar to 0, but cache the relevancy, 3 - case split based on relevancy (structural splitting), 4 - case split on relevancy and activity, 5 - case split on relevancy and current goal, 6 - activity-based case split with theory-aware branching activity"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"clause_proof"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"record a clausal proof"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.extend_nonlocal_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extend unsat cores with literals that have quantifiers with patterns that contain symbols which are not in the quantifier's body"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.extend_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"extend unsat core with literals that trigger (potential) quantifier instances"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.extend_patterns.max_distance"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"limits the distance of a pattern-extended unsat core"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.minimize"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"minimize unsat core produced by SMT context"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"core.validate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"[internal]"," validate unsat core produced by SMT context. This option is intended for debugging"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cube_depth"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"cube depth."),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - disable dynamic ackermannization, 1 - expand Leibniz's axiom if a congruence is the root of a conflict, 2 - expand Leibniz's axiom if a congruence is used during conflict resolution"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.eq"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable dynamic ackermannization for transitivity of equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.factor"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"number of instance per conflict"),(0,l.kt)("td",{parentName:"tr",align:null},"0.1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.gc"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"Dynamic ackermannization garbage collection frequency (per conflict)"),(0,l.kt)("td",{parentName:"tr",align:null},"2000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.gc_inv_decay"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"Dynamic ackermannization garbage collection decay"),(0,l.kt)("td",{parentName:"tr",align:null},"0.8")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dack.threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of times the congruence rule must be used before Leibniz's axiom is expanded"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"delay_units"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"if true then z3 will not restart when a unit clause is learned"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"delay_units_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of learned unit clauses before restarting, ignored if delay_units is false"),(0,l.kt)("td",{parentName:"tr",align:null},"32")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"dt_lazy_splits"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"How lazy datatype splits are performed: 0- eager, 1- lazy for infinite types, 2- lazy"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elim_unconstrained"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: eliminate unconstrained subterms"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ematching"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"E-Matching based quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"induction"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable generation of induction lemmas"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"lemma_gc_strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"lemma garbage collection strategy: 0 - fixed, 1 - geometric, 2 - at restart, 3 - none"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"logic"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"logic used to setup the SMT solver"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"macro_finder"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try to find universally quantified formulas that can be viewed as macros"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of conflicts before giving up."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"model based quantifier instantiation (MBQI)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.force_template"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"some quantifiers can be used as templates for building interpretations for functions. Z3 uses heuristics to decide whether a quantifier will be used as a template or not. Quantifiers with weight ",">","= mbqi.force_template are forced to be used as a template"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.id"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Only use model-based instantiation for quantifiers with id's beginning with string"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.max_cexs"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial maximal number of counterexamples used in MBQI, each counterexample generates a quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.max_cexs_incr"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"increment for MBQI_MAX_CEXS, the increment is performed after each round of MBQI"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.max_iterations"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of rounds of MBQI"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mbqi.trace"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"generate tracing messages for Model Based Quantifier Instantiation (MBQI). It will display a message before every round of MBQI, and the quantifiers that were not satisfied"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.conflict_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"conflict frequency for Pseudo-Boolean theory"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pb.learn_complements"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"learn complement literals for Pseudo-Boolean theory"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase_caching_off"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts while phase caching is off"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase_caching_on"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of conflicts while phase caching is on"),(0,l.kt)("td",{parentName:"tr",align:null},"400")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"phase_selection"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"phase selection heuristic: 0 - always false, 1 - always true, 2 - phase caching, 3 - phase caching conservative, 4 - phase caching conservative 2, 5 - random, 6 - number of occurrences, 7 - theory"),(0,l.kt)("td",{parentName:"tr",align:null},"3")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"propagate_values"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: propagate values"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pull_nested_quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: pull nested quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"q.lift_ite"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - don not lift non-ground if-then-else, 1 - use conservative ite lifting, 2 - use full lifting of if-then-else under quantifiers"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"q.lite"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Use cheap quantifier elimination during pre-processing"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.cost"),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"expression specifying what is the cost of a given quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"(+ weight generation)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.eager_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"threshold for eager quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"10.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.lazy_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"threshold for lazy quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"20.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.max_instances"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of quantifier instantiations"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.max_multi_patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"specify the number of extra multi patterns"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.profile"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"profile quantifier instantiation"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.profile_freq"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"how frequent results are reported by qi.profile"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"qi.quick_checker"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"specify quick checker mode, 0 - no quick checker, 1 - using unsat instances, 2 - using both unsat and no-sat instances"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"quasi_macros"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try to find universally quantified formulas that are quasi-macros"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random seed for the smt solver"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"refine_inj_axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: refine injectivity axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"relevancy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"relevancy propagation heuristic: 0 - disabled, 1 - relevancy is tracked by only affects quantifier instantiation, 2 - relevancy is tracked, and an atom is only asserted if it is relevant"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart.max"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of restarts."),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart_factor"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"when using geometric (or inner-outer-geometric) progression of restarts, it specifies the constant used to multiply the current restart threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"1.1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart_strategy"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"0 - geometric, 1 - inner-outer-geometric, 2 - luby, 3 - fixed, 4 - arithmetic"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restricted_quasi_macros"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"try to find universally quantified formulas that are restricted quasi-macros"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seq.max_unfolding"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal unfolding depth for checking string equations and regular expressions"),(0,l.kt)("td",{parentName:"tr",align:null},"1000000000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seq.min_unfolding"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial bound for strings whose lengths are bounded by iterative deepening. Set this to a higher value if there are only models with larger string lengths"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seq.split_w_len"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable splitting guided by length constraints"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"seq.validate"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"enable self-validation of theory axioms created by seq theory"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"solve_eqs"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"pre-processing: solve equalities"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.aggressive_length_testing"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prioritize testing concrete length values over generating more options"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.aggressive_unroll_testing"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prioritize testing concrete regex unroll counts over generating more options"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.aggressive_value_testing"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"prioritize testing concrete string constant values over generating more options"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.fast_length_tester_cache"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"cache length tester constants instead of regenerating them"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.fast_value_tester_cache"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"cache value tester constants instead of regenerating them"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.fixed_length_naive_cex"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"construct naive counterexamples when fixed-length model construction fails for a given length assignment (Z3str3 only)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.fixed_length_refinement"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use abstraction refinement in fixed-length equation solver (Z3str3 only)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.overlap_priority"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"theory-aware priority for overlapping variable cases; use smt.theory_aware_branching=true"),(0,l.kt)("td",{parentName:"tr",align:null},"-0.1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_difficulty_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"difficulty threshold for regex automata heuristics"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_failed_automaton_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of failed automaton construction attempts after which a full automaton is automatically built"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_failed_intersection_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of failed automaton intersection attempts after which intersection is always computed"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_intersection_difficulty_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"difficulty threshold for regex intersection heuristics"),(0,l.kt)("td",{parentName:"tr",align:null},"1000")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.regex_automata_length_attempt_threshold"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"number of length/path constraint attempts before checking unsatisfiability of regex terms"),(0,l.kt)("td",{parentName:"tr",align:null},"10")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.string_constant_cache"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"cache all generated string constants generated from anywhere in theory_str"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"str.strong_arrangements"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"assert equivalences instead of implications when generating string arrangement axioms"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"string_solver"),(0,l.kt)("td",{parentName:"tr",align:null},"symbol"),(0,l.kt)("td",{parentName:"tr",align:null},"solver for string/sequence theories. options are: 'z3str3' (specialized string solver), 'seq' (sequence solver), 'auto' (use static features to choose best solver), 'empty' (a no-op solver that forces an answer unknown if strings were used), 'none' (no solver)"),(0,l.kt)("td",{parentName:"tr",align:null},"seq")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"theory_aware_branching"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Allow the context to use extra information from theory solvers regarding literal branching prioritization."),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"theory_case_split"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"Allow the context to use heuristics involving theory case splits, which are a set of literals of which exactly one can be assigned True. If this option is false, the context will generate extra axioms to enforce this instead."),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of parallel threads."),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads.cube_frequency"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"frequency for using cubing"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"threads.max_conflicts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximal number of conflicts between rounds of cubing for parallel SMT"),(0,l.kt)("td",{parentName:"tr",align:null},"400")))),(0,l.kt)("h2",{id:"sls"},"sls"),(0,l.kt)("p",null,"Experimental Stochastic Local Search Solver (for QFBV only)."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"early_prune"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use early pruning for score prediction"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_memory"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum amount of memory in megabytes"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"max_restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of restarts"),(0,l.kt)("td",{parentName:"tr",align:null},"4294967295")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"paws_init"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"initial/minimum assertion weights"),(0,l.kt)("td",{parentName:"tr",align:null},"40")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"paws_sp"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"smooth assertion weights with probability paws_sp / 1024"),(0,l.kt)("td",{parentName:"tr",align:null},"52")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_offset"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use random offset for candidate evaluation"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"random_seed"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random seed"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rescore"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"rescore/normalize top-level score every base restart interval"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart_base"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"base restart interval given by moves per run"),(0,l.kt)("td",{parentName:"tr",align:null},"100")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"restart_init"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"initialize to 0 or random value (= 1) after restart"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"scale_unsat"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"scale score of unsat expressions by this factor"),(0,l.kt)("td",{parentName:"tr",align:null},"0.5")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"track_unsat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"keep a list of unsat assertions as done in SAT - currently disabled internally"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"vns_mc"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"in local minima, try Monte Carlo sampling vns_mc many 2-bit-flips per bit"),(0,l.kt)("td",{parentName:"tr",align:null},"0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"vns_repick"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"in local minima, try picking a different assertion (only for walksat)"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use walksat assertion selection (instead of gsat)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_repick"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"repick assertion if randomizing in local minima"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"use bandit heuristic for walksat assertion selection (instead of random)"),(0,l.kt)("td",{parentName:"tr",align:null},"true")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb_constant"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"the ucb constant c in the term score + c * f(touched)"),(0,l.kt)("td",{parentName:"tr",align:null},"20.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb_forget"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"scale touched by this factor every base restart interval"),(0,l.kt)("td",{parentName:"tr",align:null},"1.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb_init"),(0,l.kt)("td",{parentName:"tr",align:null},"bool"),(0,l.kt)("td",{parentName:"tr",align:null},"initialize total ucb touched to formula size"),(0,l.kt)("td",{parentName:"tr",align:null},"false")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"walksat_ucb_noise"),(0,l.kt)("td",{parentName:"tr",align:null},"double"),(0,l.kt)("td",{parentName:"tr",align:null},"add noise 0 ","<","= 256 * ucb_noise to ucb score for assertion selection"),(0,l.kt)("td",{parentName:"tr",align:null},"0.0002")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"wp"),(0,l.kt)("td",{parentName:"tr",align:null},"unsigned int"),(0,l.kt)("td",{parentName:"tr",align:null},"random walk with probability wp / 1024"),(0,l.kt)("td",{parentName:"tr",align:null},"100")))))}o.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c3aeb5e2.0e51ac78.js b/assets/js/c3aeb5e2.53242566.js similarity index 79% rename from assets/js/c3aeb5e2.0e51ac78.js rename to assets/js/c3aeb5e2.53242566.js index fbbf41a3c..a37c59ab6 100644 --- a/assets/js/c3aeb5e2.0e51ac78.js +++ b/assets/js/c3aeb5e2.53242566.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8764],{8922:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>d,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>u,toc:()=>c});var o=n(7462),s=(n(7294),n(3905)),i=n(7634),a=n.n(i);const r={title:"Soft Constraints",sidebar_position:4},l=void 0,u={unversionedId:"optimization/softconstraints",id:"optimization/softconstraints",title:"Soft Constraints",description:"The (assert-soft formula [id id]) command asserts a weighted soft constraint. The weight must be a positive natural number, but is optional. If omitted, the weight is set to 1.",source:"@site/docs-smtlib/04 - optimization/04 - softconstraints.md",sourceDirName:"04 - optimization",slug:"/optimization/softconstraints",permalink:"/z3guide/docs/optimization/softconstraints",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/04 - softconstraints.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Soft Constraints",sidebar_position:4},sidebar:"smtlibSidebar",previous:{title:"Arithmetical Optimization",permalink:"/z3guide/docs/optimization/arithmeticaloptimization"},next:{title:"Combining Objectives",permalink:"/z3guide/docs/optimization/combiningobjectives"}},d={},c=[],f={toc:c};function m(t){let{components:e,...n}=t;return(0,s.kt)("wrapper",(0,o.Z)({},f,n,{components:e,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"The ",(0,s.kt)("inlineCode",{parentName:"p"},"(assert-soft formula [:weight numeral] [:id id])")," command asserts a weighted soft constraint. The weight must be a positive natural number, but is optional. If omitted, the weight is set to 1."),(0,s.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(define-fun a1 () Bool (> x 0))\n(define-fun a2 () Bool (< x y))\n(define-fun a3 () Bool (<= (+ y x) 0))\n(assert (= a3 a1))\n(assert (or a3 a2))\n(assert-soft a3 :weight 3)\n(assert-soft (not a3) :weight 5) \n(assert-soft (not a1) :weight 10)\n(assert-soft (not a2) :weight 3)\n(check-sat)\n(get-model)\n(get-objectives)\n(eval a1)\n(eval a2)\n(eval a3)",result:{output:"sat\n(\n (define-fun y () Int\n 1)\n (define-fun x () Int\n 0)\n (define-fun a3 () Bool\n (<= (+ y x) 0))\n (define-fun a2 () Bool\n (< x y))\n (define-fun a1 () Bool\n (> x 0))\n)\n(objectives\n ( 6)\n)\nfalse\ntrue\nfalse\n",error:"",status:"z3-ran",hash:"3ce6d4cb26efea3101c022ff1e456279f086d14b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Floating point and integer weights can be mixed; internally weights are converted into rational numbers."),(0,s.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a1 Bool)\n(declare-const a2 Bool)\n(declare-const a3 Bool)\n(assert-soft a1 :weight 0.1)\n(assert-soft a2 :weight 1.0)\n(assert-soft a3 :weight 1)\n(assert-soft (or (not a1) (not a2)) :weight 3.2)\n(check-sat)\n(get-objectives)\n(get-model)",result:{output:"sat\n(objectives\n ( (/ 1.0 10.0))\n)\n(\n (define-fun a3 () Bool\n true)\n (define-fun a1 () Bool\n false)\n (define-fun a2 () Bool\n true)\n)\n",error:"",status:"z3-ran",hash:"51dfef1d95809aeb7038bf631873cec94318c1e3"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"You can use identifiers to group soft constraints. You can also repeat the same soft constraint. Every repetition counts independently. In the example we add the soft constrsaint ",(0,s.kt)("inlineCode",{parentName:"p"},"a")," twice and force it to be false. The penalty for group ",(0,s.kt)("inlineCode",{parentName:"p"},"x")," is therefore 2. The penalty for group ",(0,s.kt)("inlineCode",{parentName:"p"},"y")," is because there is only one soft constraint that is impossible to satisfy."),(0,s.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Bool)\n(declare-const b Bool)\n(assert-soft false :id y)\n(assert-soft a :id x)\n(assert-soft a :id x)\n(assert-soft b :id x)\n(assert (not a))\n\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n (y 1)\n (x 2)\n)\n",error:"",status:"z3-ran",hash:"89934f7c722a84254e253104c0d0cca647ca851c"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8764],{8922:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>d,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>u,toc:()=>c});var o=n(7462),s=(n(7294),n(3905)),i=n(7634),a=n.n(i);const r={title:"Soft Constraints",sidebar_position:4},l=void 0,u={unversionedId:"optimization/softconstraints",id:"optimization/softconstraints",title:"Soft Constraints",description:"The (assert-soft formula [id id]) command asserts a weighted soft constraint. The weight must be a positive natural number, but is optional. If omitted, the weight is set to 1.",source:"@site/docs-smtlib/04 - optimization/04 - softconstraints.md",sourceDirName:"04 - optimization",slug:"/optimization/softconstraints",permalink:"/z3guide/docs/optimization/softconstraints",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/04 - softconstraints.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Soft Constraints",sidebar_position:4},sidebar:"smtlibSidebar",previous:{title:"Arithmetical Optimization",permalink:"/z3guide/docs/optimization/arithmeticaloptimization"},next:{title:"Combining Objectives",permalink:"/z3guide/docs/optimization/combiningobjectives"}},d={},c=[],f={toc:c};function m(t){let{components:e,...n}=t;return(0,s.kt)("wrapper",(0,o.Z)({},f,n,{components:e,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"The ",(0,s.kt)("inlineCode",{parentName:"p"},"(assert-soft formula [:weight numeral] [:id id])")," command asserts a weighted soft constraint. The weight must be a positive natural number, but is optional. If omitted, the weight is set to 1."),(0,s.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(define-fun a1 () Bool (> x 0))\n(define-fun a2 () Bool (< x y))\n(define-fun a3 () Bool (<= (+ y x) 0))\n(assert (= a3 a1))\n(assert (or a3 a2))\n(assert-soft a3 :weight 3)\n(assert-soft (not a3) :weight 5) \n(assert-soft (not a1) :weight 10)\n(assert-soft (not a2) :weight 3)\n(check-sat)\n(get-model)\n(get-objectives)\n(eval a1)\n(eval a2)\n(eval a3)",result:{output:"sat\n(\n (define-fun y () Int\n 1)\n (define-fun x () Int\n 0)\n (define-fun a3 () Bool\n (<= (+ y x) 0))\n (define-fun a2 () Bool\n (< x y))\n (define-fun a1 () Bool\n (> x 0))\n)\n(objectives\n ( 6)\n)\nfalse\ntrue\nfalse\n",error:"",status:"z3-ran",hash:"3ce6d4cb26efea3101c022ff1e456279f086d14b"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Floating point and integer weights can be mixed; internally weights are converted into rational numbers."),(0,s.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a1 Bool)\n(declare-const a2 Bool)\n(declare-const a3 Bool)\n(assert-soft a1 :weight 0.1)\n(assert-soft a2 :weight 1.0)\n(assert-soft a3 :weight 1)\n(assert-soft (or (not a1) (not a2)) :weight 3.2)\n(check-sat)\n(get-objectives)\n(get-model)",result:{output:"sat\n(objectives\n ( (/ 1.0 10.0))\n)\n(\n (define-fun a3 () Bool\n true)\n (define-fun a1 () Bool\n false)\n (define-fun a2 () Bool\n true)\n)\n",error:"",status:"z3-ran",hash:"51dfef1d95809aeb7038bf631873cec94318c1e3"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"You can use identifiers to group soft constraints. You can also repeat the same soft constraint. Every repetition counts independently. In the example we add the soft constraint ",(0,s.kt)("inlineCode",{parentName:"p"},"a")," twice and force it to be false. The penalty for group ",(0,s.kt)("inlineCode",{parentName:"p"},"x")," is therefore 2. The penalty for group ",(0,s.kt)("inlineCode",{parentName:"p"},"y")," is because there is only one soft constraint that is impossible to satisfy."),(0,s.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Bool)\n(declare-const b Bool)\n(assert-soft false :id y)\n(assert-soft a :id x)\n(assert-soft a :id x)\n(assert-soft b :id x)\n(assert (not a))\n\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n (y 1)\n (x 2)\n)\n",error:"",status:"z3-ran",hash:"89934f7c722a84254e253104c0d0cca647ca851c"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d0f3c7cb.193cef7c.js b/assets/js/d0f3c7cb.193cef7c.js new file mode 100644 index 000000000..5ce1198ae --- /dev/null +++ b/assets/js/d0f3c7cb.193cef7c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[538],{3607:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>n,metadata:()=>c,toc:()=>d});var r=o(7462),i=(o(7294),o(3905)),s=o(7634),a=o.n(s);const n={title:"Advanced Topics",sidebar_position:7},l=void 0,c={unversionedId:"optimization/advancedtopics",id:"optimization/advancedtopics",title:"Advanced Topics",description:"Difference Logic",source:"@site/docs-smtlib/04 - optimization/07 - advancedtopics.md",sourceDirName:"04 - optimization",slug:"/optimization/advancedtopics",permalink:"/z3guide/docs/optimization/advancedtopics",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/07 - advancedtopics.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Advanced Topics",sidebar_position:7},sidebar:"smtlibSidebar",previous:{title:"A Small Case Study",permalink:"/z3guide/docs/optimization/asmallcasestudy"},next:{title:"Introduction",permalink:"/z3guide/docs/fixedpoints/intro"}},u={},d=[{value:"Difference Logic",id:"difference-logic",level:2},{value:"Weighted Max-SAT solvers, a portfolio",id:"weighted-max-sat-solvers-a-portfolio",level:2}],m={toc:d};function h(e){let{components:t,...o}=e;return(0,i.kt)("wrapper",(0,r.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"difference-logic"},"Difference Logic"),(0,i.kt)("p",null,"By default, Z3 uses dual Simplex to solve feasibility, and primal Simplex for optimality.\nFor arithmetical constraints that only have differences between variables, known as ",(0,i.kt)("em",{parentName:"p"},"difference logic"),", Z3 contains alternative decision procedures tuned for this domain. These have to be configured explicitly. There is a choice between a solver tuned for sparse constraints (where the ratio of variables is high compared to number of inequalities) and a solver tuned for dense constraints."),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.arith.solver 1) ; enables difference logic solver for sparse constraints\n(set-option :smt.arith.solver 3) ; enables difference logic solver for dense constraints\n(declare-const x Int)\n(declare-const y Int)\n(assert (>= 10 x))\n(assert (>= x (+ y 7)))\n(maximize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) 13)\n)\n",error:"",status:"z3-ran",hash:"570ad51ba02b8a9d15fc26e5f83faa5e64313687"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h2",{id:"weighted-max-sat-solvers-a-portfolio"},"Weighted Max-SAT solvers, a portfolio"),(0,i.kt)("p",null,"The default solver for MaxSAT problems is the MaxRes algorithm.\nSeveral alternative solvers are available. The default solver\nis chosen based on benchmarking against MaxSAT competition benchmarks, but other solver combinations, such as ",(0,i.kt)("inlineCode",{parentName:"p"},"wmax"),", may work well for some domains.\nWhen the objectives have weights such as 1, 2, 4, 8, 16, such that the sum of weights in every prefix is lower than the next weight, the solver\nuses a lexicographic optimization algorithm that attempts to first solve for the highest weight before continuing with lower weights."),(0,i.kt)("p",null,"The other main MaxSAT algorithms available are"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:" (set-option :opt.maxsat_engine rc2)\n (set-option :opt.maxsat_engine maxresbin)\n (set-option :opt.maxsat_engine wmax)",result:{output:"",error:"",status:"z3-ran",hash:"4f327a23100cdafc4fe4206080a664c506c1f4ae"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Pre-processing within the optimization solver will attempt to eliminate bounded arithmetical variables.\nFor example, the constraints"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-fun x () Int)\n(assert (<= x 1))\n(assert (>= x 0))\n(minimize x)\n(check-sat)",result:{output:"sat\n",error:"",status:"z3-ran",hash:"ea3e6827d30c4946c297e9c4fb8c82ced3aeab7e"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"are rewritten internally to a problem of the form"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Bool)\n(assert-soft (not x))\n(check-sat)",result:{output:"sat\n",error:"",status:"z3-ran",hash:"3acee42b4b673a9419d490984a8e86ac41644fdd"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"You can disable this transformation by setting"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:" (set-option :opt.elim_01 false)",result:{output:"",error:"",status:"z3-ran",hash:"f47befbf5d08d107b778a444d582bfe3acf77af2"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"For problems that are already bit-vector or Boolean, or can be rewritten to this form, the engine uses a core solver based on a tuned SAT solver.\nYou can turn off the use of the SAT solver by setting:"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:" (set-option :opt.enable_sat false)",result:{output:"",error:"",status:"z3-ran",hash:"a3ff9b46281c52e263bf72e918d109eccacff0a1"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d0f3c7cb.496ea73d.js b/assets/js/d0f3c7cb.496ea73d.js deleted file mode 100644 index 9d0b8ab8c..000000000 --- a/assets/js/d0f3c7cb.496ea73d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[538],{3607:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>n,metadata:()=>c,toc:()=>d});var r=o(7462),i=(o(7294),o(3905)),s=o(7634),a=o.n(s);const n={title:"Advanced Topics",sidebar_position:7},l=void 0,c={unversionedId:"optimization/advancedtopics",id:"optimization/advancedtopics",title:"Advanced Topics",description:"Difference Logic",source:"@site/docs-smtlib/04 - optimization/07 - advancedtopics.md",sourceDirName:"04 - optimization",slug:"/optimization/advancedtopics",permalink:"/z3guide/docs/optimization/advancedtopics",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/07 - advancedtopics.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Advanced Topics",sidebar_position:7},sidebar:"smtlibSidebar",previous:{title:"A Small Case Study",permalink:"/z3guide/docs/optimization/asmallcasestudy"},next:{title:"Introduction",permalink:"/z3guide/docs/fixedpoints/intro"}},u={},d=[{value:"Difference Logic",id:"difference-logic",level:2},{value:"Weighted Max-SAT solvers, a portfolio",id:"weighted-max-sat-solvers-a-portfolio",level:2}],m={toc:d};function h(e){let{components:t,...o}=e;return(0,i.kt)("wrapper",(0,r.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"difference-logic"},"Difference Logic"),(0,i.kt)("p",null,"Z3 uses by default an implementation of dual Simplex to solve feasibility and primal Simplex for optimality. For arithmetical constraints that only have differences between variables, known as difference logic, Z3 furthermore contains alternative decision procedures tuned for this domain. These have to be configured explicitly. There is a choice between a solver tuned for sparse constraints (where the ratio of variables is high compared to number of inequalities) and a solver tuned for dense constraints."),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(set-option :smt.arith.solver 1) ; enables difference logic solver for sparse constraints\n(set-option :smt.arith.solver 3) ; enables difference logic solver for dense constraints\n(declare-const x Int)\n(declare-const y Int)\n(assert (>= 10 x))\n(assert (>= x (+ y 7)))\n(maximize (+ x y))\n(check-sat)\n(get-objectives)",result:{output:"sat\n(objectives\n ((+ x y) 13)\n)\n",error:"",status:"z3-ran",hash:"570ad51ba02b8a9d15fc26e5f83faa5e64313687"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("h2",{id:"weighted-max-sat-solvers-a-portfolio"},"Weighted Max-SAT solvers, a portfolio"),(0,i.kt)("p",null,"The default solver for MaxSAT problems is the MaxRes algorithm. Several other alternative solvers are available. The default solver\nis chosen based on benchmarking against MaxSAT competition benchmarks, but other solver combinations, such as wmax, may work well for some domains.\nWhen the objectives are weighted by weights such as 1, 2, 4, 8, 16, such that the sum of weights in every prefix is lower than the next weight, the solver\nuses a lexicographic optimization algorithm that attempts to first solve for the highest weight before continuing with lower weights."),(0,i.kt)("p",null,"The other main MaxSAT algorithms available are"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:" (set-option :opt.maxsat_engine rc2)\n (set-option :opt.maxsat_engine maxresbin)\n (set-option :opt.maxsat_engine wmax)",result:{output:"",error:"",status:"z3-ran",hash:"4f327a23100cdafc4fe4206080a664c506c1f4ae"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"Pre-processing within the optimization solver will attempt to eliminate bounded arithmetical variables.\nFor example, the constraints"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-fun x () Int)\n(assert (<= x 1))\n(assert (>= x 0))\n(minimize x)\n(check-sat)",result:{output:"sat\n",error:"",status:"z3-ran",hash:"ea3e6827d30c4946c297e9c4fb8c82ced3aeab7e"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"get rewritten internally to a problem of the form"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Bool)\n(assert-soft (not x))\n(check-sat)",result:{output:"sat\n",error:"",status:"z3-ran",hash:"3acee42b4b673a9419d490984a8e86ac41644fdd"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"You can disable this transformation by setting"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:" (set-option :opt.elim_01 false)",result:{output:"",error:"",status:"z3-ran",hash:"f47befbf5d08d107b778a444d582bfe3acf77af2"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"For problems that are either already bit-vector or Boolean or can be rewritten to this form, the engine uses a core solver based on a tuned SAT solver.\nYou can turn off the use of the SAT solver by setting:"),(0,i.kt)(a(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:" (set-option :opt.enable_sat false)",result:{output:"",error:"",status:"z3-ran",hash:"a3ff9b46281c52e263bf72e918d109eccacff0a1"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d4e5791d.abbd30b1.js b/assets/js/d4e5791d.abbd30b1.js new file mode 100644 index 000000000..461ff6f86 --- /dev/null +++ b/assets/js/d4e5791d.abbd30b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7654],{9875:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>d,toc:()=>f});var o=t(7462),i=(t(7294),t(3905)),a=t(7634),r=t.n(a);const s={title:"Proof Logs",sidebar_position:6},l="Inference logs and proofs",d={unversionedId:"Proof Logs",id:"Proof Logs",title:"Proof Logs",description:"Z3 version 4.12.0 exposes new functionality to capture inferences.",source:"@site/docs-programming/06 - Proof Logs.md",sourceDirName:".",slug:"/Proof Logs",permalink:"/z3guide/programming/Proof Logs",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-programming/06 - Proof Logs.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Proof Logs",sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"API Reference",permalink:"/z3guide/programming/API Reference"}},c={},f=[{value:"Callbacks for clause inferences",id:"callbacks-for-clause-inferences",level:2},{value:"Print inferences created during search",id:"print-inferences-created-during-search",level:3},{value:"Capture just quantifier instantiations",id:"capture-just-quantifier-instantiations",level:3},{value:"Monitor clauses annotated with detailed justifications",id:"monitor-clauses-annotated-with-detailed-justifications",level:3},{value:"Monitor proof objects from the new core",id:"monitor-proof-objects-from-the-new-core",level:3},{value:"Saving and restoring inferences to and from files",id:"saving-and-restoring-inferences-to-and-from-files",level:2},{value:"Parse the logged inferences and replay them",id:"parse-the-logged-inferences-and-replay-them",level:3},{value:"Parse the logged inferences and check them",id:"parse-the-logged-inferences-and-check-them",level:3},{value:"Verify and self-validate on the fly",id:"verify-and-self-validate-on-the-fly",level:3},{value:"Verify and self-validate on the fly, but don't check rup",id:"verify-and-self-validate-on-the-fly-but-dont-check-rup",level:3},{value:"Command line uses",id:"command-line-uses",level:2},{value:"Inferences",id:"inferences",level:2},{value:"Proof Hints",id:"proof-hints",level:3},{value:"A sample session with proof logs",id:"a-sample-session-with-proof-logs",level:2}],u={toc:f};function p(e){let{components:n,...t}=e;return(0,i.kt)("wrapper",(0,o.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"inference-logs-and-proofs"},"Inference logs and proofs"),(0,i.kt)("p",null,"Z3 version 4.12.0 exposes new functionality to capture inferences.\nThere is an API extension to register a callback that is invoked\nwhenever the main SMT engine infers a clause. It is also possible to\nsave inferred clauses together with proof ",(0,i.kt)("em",{parentName:"p"},"hints")," that justify them.\nWe use the terminology ",(0,i.kt)("em",{parentName:"p"},"hint")," because the justifications are ",(0,i.kt)("em",{parentName:"p"},"big step"),"\ninferences. Some of the steps can be checked by lean self-contained\nproof checkers, other steps do not contain detailed guidance that would allow\nefficient validation. They require checking using general purpose SMT solving."),(0,i.kt)("p",null,"Proof terms have been supported from Z3 since 2008. They have been used in various settings,\nincluding for replaying tactics in Isabelle, for generation of interpolants, and for extracting\nseparating hyper-planes from linear programming proofs (Farkas lemma). A separate format\nis used to trace inference steps for proof mining. Proof logs allow to simplify some of the\ninfrastructure around proof reconstruction during search and for proof mining. The same logs\ncan be targeted for the different use cases. The survey ",(0,i.kt)("a",{parentName:"p",href:"https://z3prover.github.io/slides/proofs.html"},"ProofsForSMT")," discusses proof formats in use by SMT solvers and includes some additional technical details on proof logs."),(0,i.kt)("h2",{id:"callbacks-for-clause-inferences"},"Callbacks for clause inferences"),(0,i.kt)("p",null,"The API exposes a function ",(0,i.kt)("inlineCode",{parentName:"p"},"Z3_solver_register_on_clause"),"\nthat is first exposed for C, C++, .Net and Python.\nHere we illustrate using it from Python.\nThis function lets a client register a callback that is\ninvoked whenever the main SMT search engine makes an inference.\nThe main inference\nsteps are (1) introducing an ",(0,i.kt)("em",{parentName:"p"},"assumption"),",\nthat is, a clause that is entailed by the\ninput formula (formally, the clause is satisfiability preserving when added to the input formula),\n(2) ",(0,i.kt)("em",{parentName:"p"},"deleting")," a clause from the set of active clauses,\n(3) ",(0,i.kt)("em",{parentName:"p"},"rup"),", inferring a clause through propositional reasoning, the clause can be justified using\n",(0,i.kt)("em",{parentName:"p"},"reverse unit propagation"),",\n(4) ",(0,i.kt)("em",{parentName:"p"},"smt"),", or other ",(0,i.kt)("em",{parentName:"p"},"theory")," rule, when a clause is added as a theory tautology."),(0,i.kt)("h3",{id:"print-inferences-created-during-search"},"Print inferences created during search"),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:'def monitor_plain():\n print("Monitor all inferred clauses")\n s = Solver()\n s.from_string(example1)\n onc = OnClause(s, lambda pr, clause : print(pr, clause))\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"capture-just-quantifier-instantiations"},"Capture just quantifier instantiations"),(0,i.kt)("p",null,"Applications that only need to monitor quantifier instantiations can filter the stream\nbased on the name of the proof hint."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:'def log_instance(pr, clause):\n if pr.decl().name() == "inst":\n q = pr.arg(0)\n for ch in pr.children():\n if ch.decl().name() == "bind":\n print("Binding")\n print(q)\n print(ch.children())\n break\n\ndef monitor_instances():\n print("Monitor just quantifier bindings")\n s = Solver()\n s.from_string(example1)\n onc = OnClause(s, log_instance)\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"monitor-clauses-annotated-with-detailed-justifications"},"Monitor clauses annotated with detailed justifications"),(0,i.kt)("p",null,"If you set proof mode to ",(0,i.kt)("em",{parentName:"p"},"true"),", then the inferred clauses\nare annotated by more detailed proof terms. The detailed proof terms\nuse a repertoire or low level inference rules."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:"def monitor_with_proofs():\n set_param(proof=True)\n s = Solver()\n s.from_string(example1)\n onc = OnClause(s, lambda pr, clause : print(pr, clause))\n print(s.check())",result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"monitor-proof-objects-from-the-new-core"},"Monitor proof objects from the new core"),(0,i.kt)("p",null,"An SMT core based on Z3's better tuned SAT solver is accessible if you set the option\n",(0,i.kt)("inlineCode",{parentName:"p"},"sat.euf=true")," and force it by setting ",(0,i.kt)("inlineCode",{parentName:"p"},"tactic.default_tactic=sat")," (or to ",(0,i.kt)("inlineCode",{parentName:"p"},"smt"),").\nProof logs have a different format from the ",(0,i.kt)("em",{parentName:"p"},"legacy")," core. Many inferences in this format\ncan be checked efficiently by built-in validators."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:'def monitor_new_core():\n set_param("sat.euf", True)\n set_param("tactic.default_tactic", "sat")\n s = Solver()\n s.from_string(example1)\n onc = OnClause(s, lambda pr, clause : print(pr, clause))\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h2",{id:"saving-and-restoring-inferences-to-and-from-files"},"Saving and restoring inferences to and from files"),(0,i.kt)("p",null,"Inference logging, replay, and checking is supported for\nthe core enabled by setting sat.euf = true.\nsetting the default tactic to 'sat' bypasses other tactics that could\nend up using different solvers. "),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' set_param("sat.euf", True)\n set_param("tactic.default_tactic", "sat")\n\n # Set a log file to trace inferences\n set_param("solver.proof.log", "proof_log.smt2")\n s = Solver()\n s.from_string(example1)\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"parse-the-logged-inferences-and-replay-them"},"Parse the logged inferences and replay them"),(0,i.kt)("p",null,"You can also replay inferences when parsing a previously saved inferences."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' # Turn off proof checking. It is on by default when parsing proof logs.\n set_param("solver.proof.check", False) \n s = Solver()\n onc = OnClause(s, lambda pr, clause : print(pr, clause))\n s.from_file("proof_log.smt2")',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"This feature can be used when proof logs are produced using a command-line process.\nLog reconstruction is decoupled form the shell process."),(0,i.kt)("h3",{id:"parse-the-logged-inferences-and-check-them"},"Parse the logged inferences and check them"),(0,i.kt)("p",null,"Now turn on proof checking. It invokes the self-validator.\nThe self-validator produces log lines of the form:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," (proofs +tseitin 60 +alldiff 8 +euf 3 +rup 5 +inst 6 -quant 3 -inst 2)\n (verified-smt\n (inst (forall (vars (x T) (y T) (z T)) (or (subtype (:var 2) (:var 1)) ...\n")),(0,i.kt)("p",null,"The 'proofs' line summarizes inferences that were self-validated.\nThe pair +tseitin 60 indicates that 60 inferences were validated as Tseitin\nencodings.\nThe pair ",(0,i.kt)("inlineCode",{parentName:"p"},"-inst 2")," indicates that two quantifier instantiations were not self-validated\nThey were instead validated using a call to SMT solving. A log for an smt invocation\nis exemplified in the next line.\nNote that the pair ",(0,i.kt)("inlineCode",{parentName:"p"},"+inst 6")," indicates that 6 quantifier instantiations were validated\nusing a syntactic (cheap) check. Some quantifier instantiations based on quantifier elimination\nare not simple substitutions and therefore a simple syntactic check does not suffice."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' s = Solver()\n set_param("solver.proof.check", True)\n s.from_file("proof_log.smt2")',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"verify-and-self-validate-on-the-fly"},"Verify and self-validate on the fly"),(0,i.kt)("p",null,"Proof checking (self-validation) is on by default. In case someone turned it off we force it to be on in the following."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' set_param("solver.proof.check", True)\n s = Solver()\n s.from_string(example1)\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"verify-and-self-validate-on-the-fly-but-dont-check-rup"},"Verify and self-validate on the fly, but don't check rup"),(0,i.kt)("p",null,"Self-validation checks all inferences. Inferences that use theory lemmas can be checked locally without considering other inferences. Inferences that are annotated by ",(0,i.kt)("inlineCode",{parentName:"p"},"rup")," (reverse unit propagation) are justified using global inferences (unit propagation). Checking ",(0,i.kt)("inlineCode",{parentName:"p"},"rup")," during search can be very expensive. You can turn off ",(0,i.kt)("inlineCode",{parentName:"p"},"rup")," checking\nselectively to speed up validation for theory lemmas."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' set_param("solver.proof.check", True)\n set_param("sat.smt.proof.check_rup", False)\n s = Solver()\n s.from_string(example1)\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h2",{id:"command-line-uses"},"Command line uses"),(0,i.kt)("p",null,"From the command-line you can enable self-validation using the parameters"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," z3 sat.euf=true tactic.default_tactic=smt solver.proof.check=true\n")),(0,i.kt)("p",null,"You can disable ",(0,i.kt)("inlineCode",{parentName:"p"},"rup")," checking "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," z3 sat.euf=true tactic.default_tactic=smt solver.proof.check=true sat.smt.proof.check_rup=false\n")),(0,i.kt)("p",null,"To save proof logs, but not check them, use"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"z3 sat.euf=true tactic.default_tactic=smt solver.proof.log=\n")),(0,i.kt)("h2",{id:"inferences"},"Inferences"),(0,i.kt)("p",null,"Inferences are printed in a mild extension of SMTLIB2. The extension has three new commands"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"(infer clause proof_hint)\n(del clause)\n(assume clause)\n")),(0,i.kt)("p",null,"where a proof hint is a proof term that is either a detailed set of inference steps or a\ngeneric inference that requires a proof checker that understands more than a set of simple\nsyntactic inferences."),(0,i.kt)("h3",{id:"proof-hints"},"Proof Hints"),(0,i.kt)("p",null,"The format of proof hints is set up so it can be extended when new features are added.\nCommon to proof hints is that every proof hint encodes a claim in the form of a clause.\nA proof hint should justify the clause.\nWe defer a detailed documentation of proof hints but summarize some of the main hints in use:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"tseitin")," - The claim is justified by a Tseitin transformation."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"euf")," - The claim follows from equality reasoning."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"inst")," - A quantifier is instantiated using a binding given in the hint."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"farkas")," - The negation of the claim is a conjunction of inequalities. The farkas hint contains coefficients such that the inequalities, when added modulo multiplying with coefficients, sum up to a tight and inconsistent inequality."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"bound")," - An inequality is derived using a combination of inequalities and cuts"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"implied-eq")," - An implied inequality can be derived from a set of inequalities and equalities.")),(0,i.kt)("h2",{id:"a-sample-session-with-proof-logs"},"A sample session with proof logs"),(0,i.kt)("p",null,"We have the following formula"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"(set-option :sat.euf true)\n(set-option :tactic.default_tactic smt)\n(set-option :solver.proof.log proof_log.smt2)\n(declare-fun d (Int Int) Int)\n(declare-fun t (Int Int Real) (Array Int (Array Int Real)))\n(assert (forall ((u Int) (v Real)) (= v (select (select (t v (d 1 0) (d 0 u)) 0) 0))))\n(check-sat)\n")),(0,i.kt)("p",null,"It produces a proof log of the form"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"(declare-fun t (Int Int Real) (Array Int (Array Int Real)))\n(declare-fun d (Int Int) Int)\n(define-const $33 Bool (forall ((u Int) (v Real))\n (let ((a!1 (select (t (to_int v) (d 1 0) (to_real (d 0 u))) 0)))\n (= v (select a!1 0)))))\n(assume $33)\n(assume true)\n(define-const $63 Int (d 0 0))\n(define-const $64 Real (to_real $63))\n(define-const $25 Int (d 1 0))\n(define-const $72 (Array Int (Array Int Real)) (t (- 1) $25 $64))\n(define-const $73 (Array Int Real) (select $72 0))\n(define-const $74 Real (select $73 0))\n(define-const $75 Bool (= (- 1.0) $74))\n(declare-fun inst (Bool Bool Proof) Proof)\n(declare-fun bind (Int Real) Proof)\n(define-const $61 Proof (bind 0 (- 1.0)))\n(define-const $76 Bool (not $75))\n(define-const $65 Proof (inst $33 $76 $61))\n(infer $75 $65)\n(define-const $105 Int (d 0 $63))\n(define-const $106 Real (to_real $105))\n(define-const $113 (Array Int (Array Int Real)) (t (- 1) $25 $106))\n(define-const $114 (Array Int Real) (select $113 0))\n(define-const $115 Real (select $114 0))\n(define-const $116 Bool (= (- (/ 1.0 2.0)) $115))\n(define-const $109 Proof (bind $63 (- (/ 1.0 2.0))))\n(define-const $117 Bool (not $116))\n(define-const $57 Proof (inst $33 $117 $109))\n(infer $116 $57)\n(define-const $123 Bool (= (- (/ 3.0 4.0)) $115))\n(define-const $110 Proof (bind $63 (- (/ 3.0 4.0))))\n(define-const $124 Bool (not $123))\n(define-const $102 Proof (inst $33 $124 $110))\n(infer $123 $102)\n(declare-fun euf (Bool Bool) Proof)\n(define-const $41 Proof (euf $123 $116))\n(infer $41)\n(declare-fun rup () Proof)\n(infer rup)\n")),(0,i.kt)("p",null,"The log is mildly speaking not human readable. But you can use scripts to read the log."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},'from z3 import *\nset_param("solver.proof.check", False)\ns = Solver()\nonc = OnClause(s, print)\ns.from_file("proof_log.smt2")\n')),(0,i.kt)("p",null,"The result is easier to digest"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"assumption [ForAll([u, v],\n v == t(ToInt(v), d(1, 0), ToReal(d(0, u)))[0][0])]\nassumption [True]\ninst(ForAll([u, v],\n v == t(ToInt(v), d(1, 0), ToReal(d(0, u)))[0][0]),\n Not(-1 == t(-1, d(1, 0), ToReal(d(0, 0)))[0][0]),\n bind(0, -1)) [-1 == t(-1, d(1, 0), ToReal(d(0, 0)))[0][0]]\ninst(ForAll([u, v],\n v == t(ToInt(v), d(1, 0), ToReal(d(0, u)))[0][0]),\n Not(-(1/2) ==\n t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]),\n bind(d(0, 0), -(1/2))) [-(1/2) == t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]]\ninst(ForAll([u, v],\n v == t(ToInt(v), d(1, 0), ToReal(d(0, u)))[0][0]),\n Not(-(3/4) ==\n t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]),\n bind(d(0, 0), -(3/4))) [-(3/4) == t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]]\neuf(-(3/4) == t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0],\n -(1/2) == t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]) []\nrup []\n")),(0,i.kt)("p",null,"SMT proofs are of course generally much larger."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d4e5791d.f0f1ab32.js b/assets/js/d4e5791d.f0f1ab32.js deleted file mode 100644 index ee2df4f38..000000000 --- a/assets/js/d4e5791d.f0f1ab32.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7654],{9875:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>f});var o=t(7462),i=(t(7294),t(3905)),a=t(7634),r=t.n(a);const s={title:"Proof Logs",sidebar_position:6},l="Inference logs and proofs",c={unversionedId:"Proof Logs",id:"Proof Logs",title:"Proof Logs",description:"Z3 version 4.12.0 exposes new functionality to capture inferences.",source:"@site/docs-programming/06 - Proof Logs.md",sourceDirName:".",slug:"/Proof Logs",permalink:"/z3guide/programming/Proof Logs",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-programming/06 - Proof Logs.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Proof Logs",sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"API Reference",permalink:"/z3guide/programming/API Reference"}},d={},f=[{value:"Callbacks for clause inferences",id:"callbacks-for-clause-inferences",level:2},{value:"Print inferences created during search",id:"print-inferences-created-during-search",level:3},{value:"Capture just quantifier instantiations",id:"capture-just-quantifier-instantiations",level:3},{value:"Monitor clauses annotated with detailed justifications",id:"monitor-clauses-annotated-with-detailed-justifications",level:3},{value:"Monitor proof objects from the new core",id:"monitor-proof-objects-from-the-new-core",level:3},{value:"Saving and restoring inferences to and from files",id:"saving-and-restoring-inferences-to-and-from-files",level:2},{value:"Parse the logged inferences and replay them",id:"parse-the-logged-inferences-and-replay-them",level:3},{value:"Parse the logged inferences and check them",id:"parse-the-logged-inferences-and-check-them",level:3},{value:"Verify and self-validate on the fly",id:"verify-and-self-validate-on-the-fly",level:3},{value:"Verify and self-validate on the fly, but don't check rup",id:"verify-and-self-validate-on-the-fly-but-dont-check-rup",level:3},{value:"Command line uses",id:"command-line-uses",level:2},{value:"Inferences",id:"inferences",level:2},{value:"Proof Hints",id:"proof-hints",level:3},{value:"A sample session with proof logs",id:"a-sample-session-with-proof-logs",level:2}],u={toc:f};function p(e){let{components:n,...t}=e;return(0,i.kt)("wrapper",(0,o.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"inference-logs-and-proofs"},"Inference logs and proofs"),(0,i.kt)("p",null,"Z3 version 4.12.0 exposes new functionality to capture inferences.\nThere is an API extension to register a callback that is invoked\nwhenever the main SMT engine infers a clause. It is also possible to\nsave inferred clauses together with proof ",(0,i.kt)("em",{parentName:"p"},"hints")," that justify them.\nWe use the terminology ",(0,i.kt)("em",{parentName:"p"},"hint")," because the justifications are ",(0,i.kt)("em",{parentName:"p"},"big step"),"\ninferences. Some of the steps can be checked by lean self-contained\nproof checkers, other steps do not contain detailed guidance that would allow\nefficient validation. They require checking using general purpose SMT solving."),(0,i.kt)("p",null,"Proof terms have been supported from Z3 since 2008. They have been used in various settings,\nincluding for replaying tactics in Isabelle, for generation of interpolants, and for extracting\nseparating hyper-planes from linear programming proofs (Farkas lemma). A separate format\nis used to trace inference steps for proof mining. Proof logs allow to simplify some of the\ninfrastructure around proof reconstruction during search and for proof mining. The same logs\ncan be targetted for the different use cases. The survey ",(0,i.kt)("a",{parentName:"p",href:"https://z3prover.github.io/slides/proofs.html"},"ProofsForSMT")," discusses proof formats in use by SMT solvers and includes some additional technical details on proof logs."),(0,i.kt)("h2",{id:"callbacks-for-clause-inferences"},"Callbacks for clause inferences"),(0,i.kt)("p",null,"The API exposes a function ",(0,i.kt)("inlineCode",{parentName:"p"},"Z3_solver_register_on_clause"),"\nthat is first exposed for C, C++, .Net and Python. We here illustrate using\nit from Python. The function lets a client register a callback function that is\ninvoked whenever the main SMT search engine makes an inference. The main inference\nsteps are (1) introducing an ",(0,i.kt)("em",{parentName:"p"},"assumption"),", that is, a clause that is entained from the\ninput formula (formally, the clause is satisfiability preserving when added to the input formula),\n(2) ",(0,i.kt)("em",{parentName:"p"},"deleting")," a clause from the set of active clauses,\n(3) ",(0,i.kt)("em",{parentName:"p"},"rup"),", inferring a clause through propositional reasoning, the clause can be justified using\n",(0,i.kt)("em",{parentName:"p"},"reverse unit propagation"),",\n(4) ",(0,i.kt)("em",{parentName:"p"},"smt"),", or other ",(0,i.kt)("em",{parentName:"p"},"theory")," rule, when a clause is added as a theory tautology."),(0,i.kt)("h3",{id:"print-inferences-created-during-search"},"Print inferences created during search"),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:'def monitor_plain():\n print("Monitor all inferred clauses")\n s = Solver()\n s.from_string(example1)\n onc = OnClause(s, lambda pr, clause : print(pr, clause))\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"capture-just-quantifier-instantiations"},"Capture just quantifier instantiations"),(0,i.kt)("p",null,"Applications that only need to monitor quantifier instantiations can filter the stream\nbased on the name of the proof hint."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:'def log_instance(pr, clause):\n if pr.decl().name() == "inst":\n q = pr.arg(0)\n for ch in pr.children():\n if ch.decl().name() == "bind":\n print("Binding")\n print(q)\n print(ch.children())\n break\n\ndef monitor_instances():\n print("Monitor just quantifier bindings")\n s = Solver()\n s.from_string(example1)\n onc = OnClause(s, log_instance)\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"monitor-clauses-annotated-with-detailed-justifications"},"Monitor clauses annotated with detailed justifications"),(0,i.kt)("p",null,"If you set proof mode to ",(0,i.kt)("em",{parentName:"p"},"true"),", then the inferred clauses\nare annotated by more detailed proof terms. The detailed proof terms\nuse a repetorire or low level inference rules."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:"def monitor_with_proofs():\n set_param(proof=True)\n s = Solver()\n s.from_string(example1)\n onc = OnClause(s, lambda pr, clause : print(pr, clause))\n print(s.check())",result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"monitor-proof-objects-from-the-new-core"},"Monitor proof objects from the new core"),(0,i.kt)("p",null,"An SMT core based on Z3's better tuned SAT solver is accessible if you set the option\n",(0,i.kt)("inlineCode",{parentName:"p"},"sat.euf=true")," and force it by setting ",(0,i.kt)("inlineCode",{parentName:"p"},"tactic.default_tactic=sat")," (or to ",(0,i.kt)("inlineCode",{parentName:"p"},"smt"),").\nProof logs have a different format from the ",(0,i.kt)("em",{parentName:"p"},"legacy")," core. Many inferences in this format\ncan be checked efficiently by built-in validators."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:'def monitor_new_core():\n set_param("sat.euf", True)\n set_param("tactic.default_tactic", "sat")\n s = Solver()\n s.from_string(example1)\n onc = OnClause(s, lambda pr, clause : print(pr, clause))\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h2",{id:"saving-and-restoring-inferences-to-and-from-files"},"Saving and restoring inferences to and from files"),(0,i.kt)("p",null,"Inference logging, replay, and checking is supported for\nthe core enabled by setting sat.euf = true.\nsetting the default tactic to 'sat' bypasses other tactics that could\nend up using different solvers. "),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' set_param("sat.euf", True)\n set_param("tactic.default_tactic", "sat")\n\n # Set a log file to trace inferences\n set_param("solver.proof.log", "proof_log.smt2")\n s = Solver()\n s.from_string(example1)\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"parse-the-logged-inferences-and-replay-them"},"Parse the logged inferences and replay them"),(0,i.kt)("p",null,"You can also replay inferences when parsing a previously saved inferences."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' # Turn off proof checking. It is on by default when parsing proof logs.\n set_param("solver.proof.check", False) \n s = Solver()\n onc = OnClause(s, lambda pr, clause : print(pr, clause))\n s.from_file("proof_log.smt2")',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("p",null,"This feature can be used when proof logs are produced using a command-line process.\nLog reconstruction is decoupled form the shell process."),(0,i.kt)("h3",{id:"parse-the-logged-inferences-and-check-them"},"Parse the logged inferences and check them"),(0,i.kt)("p",null,"Now turn on proof checking. It invokes the self-validator.\nThe self-validator produces log lines of the form:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," (proofs +tseitin 60 +alldiff 8 +euf 3 +rup 5 +inst 6 -quant 3 -inst 2)\n (verified-smt\n (inst (forall (vars (x T) (y T) (z T)) (or (subtype (:var 2) (:var 1)) ...\n")),(0,i.kt)("p",null,"The 'proofs' line summarizes inferences that were self-validated.\nThe pair +tseitin 60 indicates that 60 inferences were validated as Tseitin\nencodings.\nThe pair ",(0,i.kt)("inlineCode",{parentName:"p"},"-inst 2")," indicates that two quantifier instantiations were not self-validated\nThey were instead validated using a call to SMT solving. A log for an smt invocation\nis exemplified in the next line.\nNote that the pair ",(0,i.kt)("inlineCode",{parentName:"p"},"+inst 6")," indicates that 6 quantifier instantations were validated\nusing a syntactic (cheap) check. Some quantifier instantiations based on quantifier elimination\nare not simple substitutions and therefore a simple syntactic check does not suffice."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' s = Solver()\n set_param("solver.proof.check", True)\n s.from_file("proof_log.smt2")',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"verify-and-self-validate-on-the-fly"},"Verify and self-validate on the fly"),(0,i.kt)("p",null,"Proof checking (self-validation) is on by default. In case someone turned it off we force it to be on in the following."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' set_param("solver.proof.check", True)\n s = Solver()\n s.from_string(example1)\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h3",{id:"verify-and-self-validate-on-the-fly-but-dont-check-rup"},"Verify and self-validate on the fly, but don't check rup"),(0,i.kt)("p",null,"Self-validation checks all inferences. Inferences that use theory lemmas can be checked locally without considering other inferences. Inferences that are annotated by ",(0,i.kt)("inlineCode",{parentName:"p"},"rup")," (reverse unit propagation) are justified using global inferences (unit propagation). Checking ",(0,i.kt)("inlineCode",{parentName:"p"},"rup")," during search can be very expensive. You can turn off ",(0,i.kt)("inlineCode",{parentName:"p"},"rup")," checking\nselectively to speed up validation for theory lemmas."),(0,i.kt)(r(),{input:{lang:"z3-python",highlight:"python",statusCodes:{},code:' set_param("solver.proof.check", True)\n set_param("sat.smt.proof.check_rup", False)\n s = Solver()\n s.from_string(example1)\n print(s.check())',result:{},githubRepo:"Z3Prover/z3",editable:!1,readonly:!0,showLineNumbers:!0},mdxType:"CustomCodeBlock"}),(0,i.kt)("h2",{id:"command-line-uses"},"Command line uses"),(0,i.kt)("p",null,"From the command-line you can enable self-validation using the parameters"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," z3 sat.euf=true tactic.default_tactic=smt solver.proof.check=true\n")),(0,i.kt)("p",null,"You can disable ",(0,i.kt)("inlineCode",{parentName:"p"},"rup")," checking "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," z3 sat.euf=true tactic.default_tactic=smt solver.proof.check=true sat.smt.proof.check_rup=false\n")),(0,i.kt)("p",null,"To save proof logs, but not check them, use"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"z3 sat.euf=true tactic.default_tactic=smt solver.proof.log=\n")),(0,i.kt)("h2",{id:"inferences"},"Inferences"),(0,i.kt)("p",null,"Inferences are printed in a mild extension of SMTLIB2. The extension has three new commands"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"(infer clause proof_hint)\n(del clause)\n(assume clause)\n")),(0,i.kt)("p",null,"where a proof hint is a proof term that is either a detailed set of inference steps or a\ngeneric inference that requires a proof checker that understands more than a set of simple\nsyntactic inferences."),(0,i.kt)("h3",{id:"proof-hints"},"Proof Hints"),(0,i.kt)("p",null,"The format of proof hints is set up so it can be extended when new features are added.\nCommon to proof hints is that every proof hint encodes a claim in the form of a clause.\nA proof hint should justify the clause.\nWe defer a detailed documentation of proof hints but summarize some of the main hints in use:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"tseitin")," - The claim is justified by a Tseitin transformation."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"euf")," - The claim follows from equality reasoning."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"inst")," - A quantifier is instantiated using a binding given in the hint."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"farkas")," - The negation of the claim is a conjunction of inequalities. The farkas hint contains coefficients such that the inequalities, when added modulo multiplying with coefficients, sum up to a tight and inconsistent inequality."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"bound")," - An inequality is derived using a combination of inequalities and cuts"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"implied-eq")," - An implied inequality can be derived from a set of inequalities and equalities.")),(0,i.kt)("h2",{id:"a-sample-session-with-proof-logs"},"A sample session with proof logs"),(0,i.kt)("p",null,"We have the following formula"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"(set-option :sat.euf true)\n(set-option :tactic.default_tactic smt)\n(set-option :solver.proof.log proof_log.smt2)\n(declare-fun d (Int Int) Int)\n(declare-fun t (Int Int Real) (Array Int (Array Int Real)))\n(assert (forall ((u Int) (v Real)) (= v (select (select (t v (d 1 0) (d 0 u)) 0) 0))))\n(check-sat)\n")),(0,i.kt)("p",null,"It produces a proof log of the form"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"(declare-fun t (Int Int Real) (Array Int (Array Int Real)))\n(declare-fun d (Int Int) Int)\n(define-const $33 Bool (forall ((u Int) (v Real))\n (let ((a!1 (select (t (to_int v) (d 1 0) (to_real (d 0 u))) 0)))\n (= v (select a!1 0)))))\n(assume $33)\n(assume true)\n(define-const $63 Int (d 0 0))\n(define-const $64 Real (to_real $63))\n(define-const $25 Int (d 1 0))\n(define-const $72 (Array Int (Array Int Real)) (t (- 1) $25 $64))\n(define-const $73 (Array Int Real) (select $72 0))\n(define-const $74 Real (select $73 0))\n(define-const $75 Bool (= (- 1.0) $74))\n(declare-fun inst (Bool Bool Proof) Proof)\n(declare-fun bind (Int Real) Proof)\n(define-const $61 Proof (bind 0 (- 1.0)))\n(define-const $76 Bool (not $75))\n(define-const $65 Proof (inst $33 $76 $61))\n(infer $75 $65)\n(define-const $105 Int (d 0 $63))\n(define-const $106 Real (to_real $105))\n(define-const $113 (Array Int (Array Int Real)) (t (- 1) $25 $106))\n(define-const $114 (Array Int Real) (select $113 0))\n(define-const $115 Real (select $114 0))\n(define-const $116 Bool (= (- (/ 1.0 2.0)) $115))\n(define-const $109 Proof (bind $63 (- (/ 1.0 2.0))))\n(define-const $117 Bool (not $116))\n(define-const $57 Proof (inst $33 $117 $109))\n(infer $116 $57)\n(define-const $123 Bool (= (- (/ 3.0 4.0)) $115))\n(define-const $110 Proof (bind $63 (- (/ 3.0 4.0))))\n(define-const $124 Bool (not $123))\n(define-const $102 Proof (inst $33 $124 $110))\n(infer $123 $102)\n(declare-fun euf (Bool Bool) Proof)\n(define-const $41 Proof (euf $123 $116))\n(infer $41)\n(declare-fun rup () Proof)\n(infer rup)\n")),(0,i.kt)("p",null,"The log is mildly speaking not human readable. But you can use scripts to read the log."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},'from z3 import *\nset_param("solver.proof.check", False)\ns = Solver()\nonc = OnClause(s, print)\ns.from_file("proof_log.smt2")\n')),(0,i.kt)("p",null,"The result is easier to digest"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"assumption [ForAll([u, v],\n v == t(ToInt(v), d(1, 0), ToReal(d(0, u)))[0][0])]\nassumption [True]\ninst(ForAll([u, v],\n v == t(ToInt(v), d(1, 0), ToReal(d(0, u)))[0][0]),\n Not(-1 == t(-1, d(1, 0), ToReal(d(0, 0)))[0][0]),\n bind(0, -1)) [-1 == t(-1, d(1, 0), ToReal(d(0, 0)))[0][0]]\ninst(ForAll([u, v],\n v == t(ToInt(v), d(1, 0), ToReal(d(0, u)))[0][0]),\n Not(-(1/2) ==\n t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]),\n bind(d(0, 0), -(1/2))) [-(1/2) == t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]]\ninst(ForAll([u, v],\n v == t(ToInt(v), d(1, 0), ToReal(d(0, u)))[0][0]),\n Not(-(3/4) ==\n t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]),\n bind(d(0, 0), -(3/4))) [-(3/4) == t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]]\neuf(-(3/4) == t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0],\n -(1/2) == t(-1, d(1, 0), ToReal(d(0, d(0, 0))))[0][0]) []\nrup []\n")),(0,i.kt)("p",null,"SMT proofs are of course generally much larger."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d7317efc.2819b60e.js b/assets/js/d7317efc.98dba44a.js similarity index 73% rename from assets/js/d7317efc.2819b60e.js rename to assets/js/d7317efc.98dba44a.js index c7b3d56b7..96bc6afdc 100644 --- a/assets/js/d7317efc.2819b60e.js +++ b/assets/js/d7317efc.98dba44a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2628],{614:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>d,contentTitle:()=>m,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=t(7462),s=(t(7294),t(3905)),r=t(7634),i=t.n(r);const o={title:"Lambdas",sidebar_position:6},m=void 0,l={unversionedId:"logic/Lambdas",id:"logic/Lambdas",title:"Lambdas",description:"Lambda binding is available as an extension to the theory of arrays.",source:"@site/docs-smtlib/01 - logic/06 - Lambdas.md",sourceDirName:"01 - logic",slug:"/logic/Lambdas",permalink:"/z3guide/docs/logic/Lambdas",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/06 - Lambdas.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Lambdas",sidebar_position:6},sidebar:"smtlibSidebar",previous:{title:"Quantifiers",permalink:"/z3guide/docs/logic/Quantifiers"},next:{title:"Recursive Functions",permalink:"/z3guide/docs/logic/Recursive Functions"}},d={},p=[{value:"Syntax and Semantics",id:"syntax-and-semantics",level:2},{value:"Inlining definitions using Lambda",id:"inlining-definitions-using-lambda",level:2},{value:"Lambdas as Arrays",id:"lambdas-as-arrays",level:2},{value:"From First-Order to limited Higher-Order",id:"from-first-order-to-limited-higher-order",level:2}],c={toc:p};function u(e){let{components:a,...t}=e;return(0,s.kt)("wrapper",(0,n.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"Lambda binding is available as an extension to the theory of arrays."),(0,s.kt)("h2",{id:"syntax-and-semantics"},"Syntax and Semantics"),(0,s.kt)("p",null,"Lambda expressions use syntax similar to quantifiers. It is of the form:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"(lambda ((x X) (y Y) (z Z)) t)\n")),(0,s.kt)("p",null,"where ",(0,s.kt)("inlineCode",{parentName:"p"},"x y z")," are lambda bound variables and ",(0,s.kt)("inlineCode",{parentName:"p"},"t")," is an expression that can contain the bound variables. "),(0,s.kt)("p",null,"The laws of lambda calculus apply.\nThe simplifier performs ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"\u03b2")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\beta")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05278em"}},"\u03b2")))))," reduction."),(0,s.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(simplify (select (lambda ((x Int) (y Int) (z Int)) (+ x (* z y))) a b c))",result:{output:"(+ a (* b c))\n",error:"",status:"z3-ran",hash:"534658612dce19d85b2e6191066936e0aa2602ab"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Other rules ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"\u03b1")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\alpha")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1")))))," (renaming) and ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"\u03b7")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\eta")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03b7")))))," (extensionality) are enforced by the solver."),(0,s.kt)("h2",{id:"inlining-definitions-using-lambda"},"Inlining definitions using Lambda"),(0,s.kt)("p",null,"The main utility of lambdas in Z3 is for introducing inline definitions as the following ",(0,s.kt)("inlineCode",{parentName:"p"},"memset")," example illustrates."),(0,s.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const m (Array Int Int))\n(declare-const m1 (Array Int Int))\n(declare-const z Int)\n(define-fun memset ((lo Int) (hi Int) (y Int) (m (Array Int Int))) \n (Array Int Int) \n (lambda ((x Int)) (if (and (<= lo x) (<= x hi)) y (m x))))\n(assert (= m1 (memset 1 700 z m)))\n(assert (not (= (select m1 6) z)))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"b8a2a31b46578ee348a5d77e37652aa13d586df6"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Note that the type of ",(0,s.kt)("inlineCode",{parentName:"p"},"(lambda ((x Int)) (if (and (<= lo x) (<= x hi)) y (m x)))")," is ",(0,s.kt)("inlineCode",{parentName:"p"},"(Array Int Int)"),". "),(0,s.kt)("h2",{id:"lambdas-as-arrays"},"Lambdas as Arrays"),(0,s.kt)("p",null,"Thus, the type of a lambda expression is an array where the domain of the\narray are the argument types and the range is the sort of the body of the lambda expression."),(0,s.kt)("p",null,"Thus, in z3 arrays are synonymous with function spaces. You can transition between arrays and\nfunctions using ",(0,s.kt)("inlineCode",{parentName:"p"},"as-array")," to convert a function to an array and using function macros to treat an array as a function.\nThe example also illustrates a subtle use of recursive function declarations.\nFunctions declared using ",(0,s.kt)("inlineCode",{parentName:"p"},"define-fun-rec")," are expanded on demand and therefore the function symbols are available as arguments to ",(0,s.kt)("inlineCode",{parentName:"p"},"as-array"),".\nThis contrasts functinos declared using ",(0,s.kt)("inlineCode",{parentName:"p"},"define-fun")," that are treated as macros that are expanded at parse time. Their function symbols cannot be passed to ",(0,s.kt)("inlineCode",{parentName:"p"},"as-array"),"."),(0,s.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-fun f (Int) Int)\n(push)\n(assert (not (= (select (_ as-array f) 0) (f 0))))\n(check-sat)\n(pop)\n(push)\n(declare-const a (Array Int Int))\n(define-fun-rec f2 ((x Int)) Int (select a x))\n(assert (not (= (select a 0) (select (_ as-array f2) 0))))\n(check-sat)\n(pop)",result:{output:"unsat\nunsat\n",error:"",status:"z3-ran",hash:"bb5daac2b9da6f355ec07c507ec0acbc46dcf7b9"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("h2",{id:"from-first-order-to-limited-higher-order"},"From First-Order to limited Higher-Order"),(0,s.kt)("p",null,"There is limited true higher order reasoning. One basic example that ",(0,s.kt)("em",{parentName:"p"},"does")," work thanks to model construction of MBQI instantiation procedure\nis establishing a second-order definition for equality."),(0,s.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (forall ((q (Array Int Bool))) (= (q x) (q y))))\n(assert (not (= x y)))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"41c805061059b52b1be73c84ff24b74f600476d6"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"During instantiation, z3 determines to instantiate ",(0,s.kt)("inlineCode",{parentName:"p"},"q")," with the term ",(0,s.kt)("inlineCode",{parentName:"p"},"(lambda ((z Int)) (= x z))")," and therefore it infers the fact ",(0,s.kt)("inlineCode",{parentName:"p"},"(= (= x x) (= x y))"),".\nNote that the example illustrates using an array as a function application. We wrote ",(0,s.kt)("inlineCode",{parentName:"p"},"(q x)")," instead of ",(0,s.kt)("inlineCode",{parentName:"p"},"(select q x)")," for the array ",(0,s.kt)("inlineCode",{parentName:"p"},"q"),".\nIt is a feature that is supported as a convenience: the parser performs a best-effort coercions to insert ",(0,s.kt)("inlineCode",{parentName:"p"},"select")," automatically."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2628],{614:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>d,contentTitle:()=>m,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=t(7462),s=(t(7294),t(3905)),r=t(7634),i=t.n(r);const o={title:"Lambdas",sidebar_position:6},m=void 0,l={unversionedId:"logic/Lambdas",id:"logic/Lambdas",title:"Lambdas",description:"Lambda binding is available as an extension to the theory of arrays.",source:"@site/docs-smtlib/01 - logic/06 - Lambdas.md",sourceDirName:"01 - logic",slug:"/logic/Lambdas",permalink:"/z3guide/docs/logic/Lambdas",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/06 - Lambdas.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Lambdas",sidebar_position:6},sidebar:"smtlibSidebar",previous:{title:"Quantifiers",permalink:"/z3guide/docs/logic/Quantifiers"},next:{title:"Recursive Functions",permalink:"/z3guide/docs/logic/Recursive Functions"}},d={},p=[{value:"Syntax and Semantics",id:"syntax-and-semantics",level:2},{value:"Inlining definitions using Lambda",id:"inlining-definitions-using-lambda",level:2},{value:"Lambdas as Arrays",id:"lambdas-as-arrays",level:2},{value:"From First-Order to limited Higher-Order",id:"from-first-order-to-limited-higher-order",level:2}],c={toc:p};function u(e){let{components:a,...t}=e;return(0,s.kt)("wrapper",(0,n.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"Lambda binding is available as an extension to the theory of arrays."),(0,s.kt)("h2",{id:"syntax-and-semantics"},"Syntax and Semantics"),(0,s.kt)("p",null,"Lambda expressions use syntax similar to quantifiers. It is of the form:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"(lambda ((x X) (y Y) (z Z)) t)\n")),(0,s.kt)("p",null,"where ",(0,s.kt)("inlineCode",{parentName:"p"},"x y z")," are lambda bound variables and ",(0,s.kt)("inlineCode",{parentName:"p"},"t")," is an expression that can contain the bound variables. "),(0,s.kt)("p",null,"The laws of lambda calculus apply.\nThe simplifier performs ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"\u03b2")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\beta")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05278em"}},"\u03b2")))))," reduction."),(0,s.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-const b Int)\n(declare-const c Int)\n(simplify (select (lambda ((x Int) (y Int) (z Int)) (+ x (* z y))) a b c))",result:{output:"(+ a (* b c))\n",error:"",status:"z3-ran",hash:"534658612dce19d85b2e6191066936e0aa2602ab"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Other rules ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"\u03b1")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\alpha")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1")))))," (renaming) and ",(0,s.kt)("span",{parentName:"p",className:"math math-inline"},(0,s.kt)("span",{parentName:"span",className:"katex"},(0,s.kt)("span",{parentName:"span",className:"katex-mathml"},(0,s.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,s.kt)("semantics",{parentName:"math"},(0,s.kt)("mrow",{parentName:"semantics"},(0,s.kt)("mi",{parentName:"mrow"},"\u03b7")),(0,s.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\eta")))),(0,s.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,s.kt)("span",{parentName:"span",className:"base"},(0,s.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,s.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03b7")))))," (extensionality) are enforced by the solver."),(0,s.kt)("h2",{id:"inlining-definitions-using-lambda"},"Inlining definitions using Lambda"),(0,s.kt)("p",null,"The main utility of lambdas in Z3 is for introducing inline definitions as the following ",(0,s.kt)("inlineCode",{parentName:"p"},"memset")," example illustrates."),(0,s.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const m (Array Int Int))\n(declare-const m1 (Array Int Int))\n(declare-const z Int)\n(define-fun memset ((lo Int) (hi Int) (y Int) (m (Array Int Int))) \n (Array Int Int) \n (lambda ((x Int)) (if (and (<= lo x) (<= x hi)) y (m x))))\n(assert (= m1 (memset 1 700 z m)))\n(assert (not (= (select m1 6) z)))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"b8a2a31b46578ee348a5d77e37652aa13d586df6"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"Note that the type of ",(0,s.kt)("inlineCode",{parentName:"p"},"(lambda ((x Int)) (if (and (<= lo x) (<= x hi)) y (m x)))")," is ",(0,s.kt)("inlineCode",{parentName:"p"},"(Array Int Int)"),". "),(0,s.kt)("h2",{id:"lambdas-as-arrays"},"Lambdas as Arrays"),(0,s.kt)("p",null,"Thus, the type of a lambda expression is an array where the domain of the\narray are the argument types and the range is the sort of the body of the lambda expression."),(0,s.kt)("p",null,"Thus, in z3 arrays are synonymous with function spaces. You can transition between arrays and\nfunctions using ",(0,s.kt)("inlineCode",{parentName:"p"},"as-array")," to convert a function to an array and using function macros to treat an array as a function.\nThe example also illustrates a subtle use of recursive function declarations.\nFunctions declared using ",(0,s.kt)("inlineCode",{parentName:"p"},"define-fun-rec")," are expanded on demand and therefore the function symbols are available as arguments to ",(0,s.kt)("inlineCode",{parentName:"p"},"as-array"),".\nThis contrasts with functions declared using ",(0,s.kt)("inlineCode",{parentName:"p"},"define-fun")," that are treated as macros that are expanded at parse time. Their function symbols cannot be passed to ",(0,s.kt)("inlineCode",{parentName:"p"},"as-array"),"."),(0,s.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-fun f (Int) Int)\n(push)\n(assert (not (= (select (_ as-array f) 0) (f 0))))\n(check-sat)\n(pop)\n(push)\n(declare-const a (Array Int Int))\n(define-fun-rec f2 ((x Int)) Int (select a x))\n(assert (not (= (select a 0) (select (_ as-array f2) 0))))\n(check-sat)\n(pop)",result:{output:"unsat\nunsat\n",error:"",status:"z3-ran",hash:"bb5daac2b9da6f355ec07c507ec0acbc46dcf7b9"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("h2",{id:"from-first-order-to-limited-higher-order"},"From First-Order to limited Higher-Order"),(0,s.kt)("p",null,"There is limited true higher order reasoning. One basic example that ",(0,s.kt)("em",{parentName:"p"},"does")," work thanks to model construction of MBQI instantiation procedure\nis establishing a second-order definition for equality."),(0,s.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(assert (forall ((q (Array Int Bool))) (= (q x) (q y))))\n(assert (not (= x y)))\n(check-sat)",result:{output:"unsat\n",error:"",status:"z3-ran",hash:"41c805061059b52b1be73c84ff24b74f600476d6"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,s.kt)("p",null,"During instantiation, z3 determines to instantiate ",(0,s.kt)("inlineCode",{parentName:"p"},"q")," with the term ",(0,s.kt)("inlineCode",{parentName:"p"},"(lambda ((z Int)) (= x z))")," and therefore it infers the fact ",(0,s.kt)("inlineCode",{parentName:"p"},"(= (= x x) (= x y))"),".\nNote that the example illustrates using an array as a function application. We wrote ",(0,s.kt)("inlineCode",{parentName:"p"},"(q x)")," instead of ",(0,s.kt)("inlineCode",{parentName:"p"},"(select q x)")," for the array ",(0,s.kt)("inlineCode",{parentName:"p"},"q"),".\nIt is a feature that is supported as a convenience: the parser performs a best-effort coercions to insert ",(0,s.kt)("inlineCode",{parentName:"p"},"select")," automatically."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e33d6ff1.0b8ce0b7.js b/assets/js/e33d6ff1.0b8ce0b7.js new file mode 100644 index 000000000..cb4dfb170 --- /dev/null +++ b/assets/js/e33d6ff1.0b8ce0b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6932],{3197:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var n=s(7462),a=(s(7294),s(3905)),o=s(7634),i=s.n(o);const r={title:"Goals",sidebar_position:2},l=void 0,c={unversionedId:"strategies/goals",id:"strategies/goals",title:"Goals",description:'Z3 implements a methodology for orchestrating reasoning engines where "big" symbolic reasoning steps are represented as functions known as tactics, and tactics are composed using combinators known as tacticals. Tactics process sets of formulas called Goals.',source:"@site/docs-smtlib/03 - strategies/02 - goals.md",sourceDirName:"03 - strategies",slug:"/strategies/goals",permalink:"/z3guide/docs/strategies/goals",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/03 - strategies/02 - goals.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Goals",sidebar_position:2},sidebar:"smtlibSidebar",previous:{title:"Introduction",permalink:"/z3guide/docs/strategies/intro"},next:{title:"Tactics",permalink:"/z3guide/docs/strategies/tactics"}},p={},d=[],u={toc:d};function m(e){let{components:t,...s}=e;return(0,a.kt)("wrapper",(0,n.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,'Z3 implements a methodology for orchestrating reasoning engines where "big" symbolic reasoning steps are represented as functions known as ',(0,a.kt)("em",{parentName:"p"},"tactics"),", and tactics are composed using combinators known as ",(0,a.kt)("em",{parentName:"p"},"tacticals"),". Tactics process sets of formulas called Goals."),(0,a.kt)("p",null,"When a tactic is applied to some goal G, four different outcomes are possible. In SMT 2.0, the goal is the conjunction of all assertions. The tactic succeeds in showing G to be satisfiable (i.e., feasible); succeeds in showing G to be unsatisfiable (i.e., infeasible); produces a sequence of subgoals; or fails. When reducing a goal G to a sequence of subgoals G1, ..., Gn, we face the problem of model conversion. A model converter constructs a model for G using a model for some subgoal Gi."),(0,a.kt)("p",null,"In the following example, we use the command ",(0,a.kt)("inlineCode",{parentName:"p"},"apply")," to execute a tactic composed of two built-in tactics: ",(0,a.kt)("inlineCode",{parentName:"p"},"simplify")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"solve-eqs"),". The tactic ",(0,a.kt)("inlineCode",{parentName:"p"},"simplify")," applies transformations equivalent to the ones found in the ",(0,a.kt)("inlineCode",{parentName:"p"},"simplify")," command.\nThe tactic ",(0,a.kt)("inlineCode",{parentName:"p"},"solve-eqs")," eliminates variables using Gaussian elimination.\nActually, ",(0,a.kt)("inlineCode",{parentName:"p"},"solve-eqs")," is not restricted linear arithmetic, but can also eliminate arbitrary variables. The combinator ",(0,a.kt)("inlineCode",{parentName:"p"},"then")," applies ",(0,a.kt)("inlineCode",{parentName:"p"},"simplify")," to the input goal and ",(0,a.kt)("inlineCode",{parentName:"p"},"solve-eqs")," to each subgoal produced by ",(0,a.kt)("inlineCode",{parentName:"p"},"simplify"),". In this example, only one subgoal is produced."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Real)\n(declare-const y Real)\n\n(assert (> x 0.0))\n(assert (> y 0.0))\n(assert (= x (+ y 2.0)))\n\n(apply (then simplify solve-eqs))",result:{output:"(goals\n(goal\n (not (<= x 0.0))\n (not (<= x 2.0))\n :precision precise :depth 2)\n)\n",error:"",status:"z3-ran",hash:"d94de1a33c72b81c3c42fdf04fa1429ff1918bb6"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"In the example above, variable x is eliminated, and is not present in the resultant goal."),(0,a.kt)("p",null,"In Z3, a ",(0,a.kt)("em",{parentName:"p"},"clause")," is any constraint of the form ",(0,a.kt)("inlineCode",{parentName:"p"},"(or f_1 ... f_n)"),".\nThe tactic ",(0,a.kt)("inlineCode",{parentName:"p"},"split-clause")," will select a clause ",(0,a.kt)("inlineCode",{parentName:"p"},"(or f_1 ... f_n)")," in the input goal, and split it into n subgoals, one for each subformula ",(0,a.kt)("inlineCode",{parentName:"p"},"f_i"),"."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Real)\n(declare-const y Real)\n\n(assert (or (< x 0.0) (> x 0.0)))\n(assert (= x (+ y 1.0)))\n(assert (< y 0.0))\n\n(apply split-clause)",result:{output:"(goals\n(goal\n (< x 0.0)\n (= x (+ y 1.0))\n (< y 0.0)\n :precision precise :depth 1)\n(goal\n (> x 0.0)\n (= x (+ y 1.0))\n (< y 0.0)\n :precision precise :depth 1)\n)\n",error:"",status:"z3-ran",hash:"7b7f050452a357e0a6b2260a26a357d62c17c043"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e33d6ff1.5eeeed21.js b/assets/js/e33d6ff1.5eeeed21.js deleted file mode 100644 index c75992ae2..000000000 --- a/assets/js/e33d6ff1.5eeeed21.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6932],{3197:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var o=t(7462),a=(t(7294),t(3905)),n=t(7634),i=t.n(n);const r={title:"Goals",sidebar_position:2},l=void 0,c={unversionedId:"strategies/goals",id:"strategies/goals",title:"Goals",description:'Z3 implements a methodology for orchestrating reasoning engines where "big" symbolic reasoning steps are represented as functions known as tactics, and tactics are composed using combinators known as tacticals. Tactics process sets of formulas called Goals.',source:"@site/docs-smtlib/03 - strategies/02 - goals.md",sourceDirName:"03 - strategies",slug:"/strategies/goals",permalink:"/z3guide/docs/strategies/goals",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/03 - strategies/02 - goals.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Goals",sidebar_position:2},sidebar:"smtlibSidebar",previous:{title:"Introduction",permalink:"/z3guide/docs/strategies/intro"},next:{title:"Tactics",permalink:"/z3guide/docs/strategies/tactics"}},u={},d=[],p={toc:d};function m(e){let{components:s,...t}=e;return(0,a.kt)("wrapper",(0,o.Z)({},p,t,{components:s,mdxType:"MDXLayout"}),(0,a.kt)("p",null,'Z3 implements a methodology for orchestrating reasoning engines where "big" symbolic reasoning steps are represented as functions known as tactics, and tactics are composed using combinators known as tacticals. Tactics process sets of formulas called Goals.'),(0,a.kt)("p",null,"When a tactic is applied to some goal G, four different outcomes are possible. In SMT 2.0, the goal is the conjunction of all assertions. The tactic succeeds in showing G to be satisfiable (i.e., feasible); succeeds in showing G to be unsatisfiable (i.e., infeasible); produces a sequence of subgoals; or fails. When reducing a goal G to a sequence of subgoals G1, ..., Gn, we face the problem of model conversion. A model converter construct a model for G using a model for some subgoal Gi."),(0,a.kt)("p",null,"In the following example, we use the command apply to execute a tactic composed of two built-in tactics: simplify and solve-eqs. The tactic simplify apply transformations equivalent to the ones found in the command simplify. The tactic solver-eqs eliminate variables using Gaussian elimination. Actually, solve-eqs is not restricted only to linear arithmetic. It can also eliminate arbitrary variables. Then, combinator then applies simplify to the input goal and solve-eqs to each subgoal produced by simplify. In this example, only one subgoal is produced."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Real)\n(declare-const y Real)\n\n(assert (> x 0.0))\n(assert (> y 0.0))\n(assert (= x (+ y 2.0)))\n\n(apply (then simplify solve-eqs))",result:{output:"(goals\n(goal\n (not (<= x 0.0))\n (not (<= x 2.0))\n :precision precise :depth 2)\n)\n",error:"",status:"z3-ran",hash:"d94de1a33c72b81c3c42fdf04fa1429ff1918bb6"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"In the example above, variable x is eliminated, and is not present the resultant goal."),(0,a.kt)("p",null,"In Z3, we say a clause is any constraint of the form (or f_1 ... f_n). The tactic split-clause will select a clause (or f_1 ... f_n) in the input goal, and split it n subgoals. One for each subformula f_i."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Real)\n(declare-const y Real)\n\n(assert (or (< x 0.0) (> x 0.0)))\n(assert (= x (+ y 1.0)))\n(assert (< y 0.0))\n\n(apply split-clause)",result:{output:"(goals\n(goal\n (< x 0.0)\n (= x (+ y 1.0))\n (< y 0.0)\n :precision precise :depth 1)\n(goal\n (> x 0.0)\n (= x (+ y 1.0))\n (< y 0.0)\n :precision precise :depth 1)\n)\n",error:"",status:"z3-ran",hash:"7b7f050452a357e0a6b2260a26a357d62c17c043"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ebd79e67.b8cdba41.js b/assets/js/ebd79e67.7f971913.js similarity index 87% rename from assets/js/ebd79e67.b8cdba41.js rename to assets/js/ebd79e67.7f971913.js index ee6800ae7..155b13d9a 100644 --- a/assets/js/ebd79e67.b8cdba41.js +++ b/assets/js/ebd79e67.7f971913.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7074],{2913:(i,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>d,frontMatter:()=>n,metadata:()=>r,toc:()=>m});var e=o(7462),a=(o(7294),o(3905));o(7634);const n={title:"Optimization from the API",sidebar_position:2},p=void 0,r={unversionedId:"optimization/apioptimization",id:"optimization/apioptimization",title:"Optimization from the API",description:"Z3's programmatic API exposes all available optimization features.",source:"@site/docs-smtlib/04 - optimization/02 - apioptimization.md",sourceDirName:"04 - optimization",slug:"/optimization/apioptimization",permalink:"/z3guide/docs/optimization/apioptimization",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/02 - apioptimization.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Optimization from the API",sidebar_position:2},sidebar:"smtlibSidebar",previous:{title:"Introduction",permalink:"/z3guide/docs/optimization/intro"},next:{title:"Arithmetical Optimization",permalink:"/z3guide/docs/optimization/arithmeticaloptimization"}},s={},m=[],l={toc:m};function d(i){let{components:t,...o}=i;return(0,a.kt)("wrapper",(0,e.Z)({},l,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Z3's programmatic ",(0,a.kt)("a",{parentName:"p",href:"https://z3prover.github.io/api/html/"},"API")," exposes all available optimization features."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"http://lonelypad.blogspot.dk/2014/08/f-and-linear-programming-introduction.html"},"Follow this link for a tutorial on using optimization features from F#."),"."),(0,a.kt)("li",{parentName:"ul"},"The Python API is also convenient for prototyping. The Optimize Python object is used when solving constraints with optimization objectives.")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7074],{2913:(i,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>d,frontMatter:()=>n,metadata:()=>r,toc:()=>m});var e=o(7462),a=(o(7294),o(3905));o(7634);const n={title:"Optimization from the API",sidebar_position:2},p=void 0,r={unversionedId:"optimization/apioptimization",id:"optimization/apioptimization",title:"Optimization from the API",description:"Z3's programmatic API exposes all available optimization features.",source:"@site/docs-smtlib/04 - optimization/02 - apioptimization.md",sourceDirName:"04 - optimization",slug:"/optimization/apioptimization",permalink:"/z3guide/docs/optimization/apioptimization",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/04 - optimization/02 - apioptimization.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Optimization from the API",sidebar_position:2},sidebar:"smtlibSidebar",previous:{title:"Introduction",permalink:"/z3guide/docs/optimization/intro"},next:{title:"Arithmetical Optimization",permalink:"/z3guide/docs/optimization/arithmeticaloptimization"}},s={},m=[],l={toc:m};function d(i){let{components:t,...o}=i;return(0,a.kt)("wrapper",(0,e.Z)({},l,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Z3's programmatic ",(0,a.kt)("a",{parentName:"p",href:"https://z3prover.github.io/api/html/"},"API")," exposes all available optimization features."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"http://lonelypad.blogspot.dk/2014/08/f-and-linear-programming-introduction.html"},"Follow this link for a tutorial on using optimization features from F#.")),(0,a.kt)("li",{parentName:"ul"},"The Python API is also convenient for prototyping. The Optimize Python object is used when solving constraints with optimization objectives.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f71821c5.33cd699a.js b/assets/js/f71821c5.33cd699a.js deleted file mode 100644 index 102dc72a7..000000000 --- a/assets/js/f71821c5.33cd699a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8320],{9291:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>i,metadata:()=>u,toc:()=>c});var o=n(7462),a=(n(7294),n(3905)),s=n(7634),r=n.n(s);const i={title:"Basic Commands",sidebar_position:2},l=void 0,u={unversionedId:"logic/basiccommands",id:"logic/basiccommands",title:"Basic Commands",description:"The Z3 input format is an extension of the one defined by the SMT-LIB format.",source:"@site/docs-smtlib/01 - logic/02 - basiccommands.md",sourceDirName:"01 - logic",slug:"/logic/basiccommands",permalink:"/z3guide/docs/logic/basiccommands",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/02 - basiccommands.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Basic Commands",sidebar_position:2},sidebar:"smtlibSidebar",previous:{title:"Introduction",permalink:"/z3guide/docs/logic/intro"},next:{title:"Propositional Logic",permalink:"/z3guide/docs/logic/propositional-logic"}},d={},c=[{value:"Using Scopes",id:"using-scopes",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Additional commands",id:"additional-commands",level:3}],m={toc:c};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"The Z3 input format is an extension of the one defined by the ",(0,a.kt)("a",{parentName:"p",href:"http://www.smtlib.org"},"SMT-LIB format"),".")),(0,a.kt)("p",null,"A Z3 script is a sequence of commands. As an extension of the SMT-LIB format, this means that Z3 is not technically a programming language in the same way that Java, Python, or Javascript are - meaning there are no loops or variables as they are commonly understood on the whole. The help command displays a list of all available commands. The command ",(0,a.kt)("inlineCode",{parentName:"p"},"echo")," displays a message. Internally, Z3 maintains a stack of user provided formulas and declarations. We say these are the assertions provided by the user. The command ",(0,a.kt)("inlineCode",{parentName:"p"},"declare-const")," declares a constant of a given type (aka sort). The command ",(0,a.kt)("inlineCode",{parentName:"p"},"declare-fun")," declares a function. In the following example, we declared a function that receives an integer and a Boolean and returns an integer."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(echo "starting Z3...")\n(declare-const a Int)\n(declare-fun f (Int Bool) Int)',result:{output:"starting Z3...\n",error:"",status:"z3-ran",hash:"98c95af2427b923ab2db86b390681c8d3449c7d7"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The command assert adds a formula into the Z3 internal stack. We say the set of formulas in the Z3 stack is satisfiable if there is an interpretation (for the user declared constants and functions) that makes all asserted formulas true."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-fun f (Int Bool) Int)\n(assert (< a 10))\n(assert (< (f a true) 100))\n(check-sat)",result:{output:"sat\n",error:"",status:"z3-ran",hash:"30211ffcbe31a9cf60bcb88aad8ca88b1ad1d5cd"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The first asserted formula states that the constant a must be less than 10. The second one states that the function f applied to a and true must return a value less than 100. The command check-sat determines whether the current formulas on the Z3 stack are satisfiable or not. If the formulas are satisfiable, Z3 returns sat. If they are not satisfiable (i.e., they are unsatisfiable), Z3 returns unsat. Z3 may also return unknown when it can't determine whether a formula is satisfiable or not."),(0,a.kt)("p",null,"When the command check-sat returns sat, the command get-model can be used to retrieve an interpretation that makes all formulas on the Z3 internal stack true."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-fun f (Int Bool) Int)\n(assert (< a 10))\n(assert (> (f a true) 100))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun a () Int\n 0)\n (define-fun f ((x!0 Int) (x!1 Bool)) Int\n 101)\n)\n",error:"",status:"z3-ran",hash:"d64919bedfd2d04fdafde23bd1e5099397eab633"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The interpretation is provided using definitions. For example, the definition"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"}," (define-fun a () Int ","[val]",")")),(0,a.kt)("p",null,"states that the value of a in the model is ","[val]",". The definition"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"(define-fun f ((x!1 Int) (x!2 Bool)) Int\n...\n)")),(0,a.kt)("p",null,"is very similar to a function definition used in programming languages. In this example, x!1 and x!2 are the arguments of the function interpretation created by Z3. For this simple example, the definition of f is based on ite's (aka if-then-elses or conditional expressions). For example, the expression"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"(ite (and (= x!1 11) (= x!2 false)) 21 0)")),(0,a.kt)("p",null,"evaluates (returns) 21 when x!1 is equal to 11, and x!2 is equal to false. Otherwise, it returns 0."),(0,a.kt)("h2",{id:"using-scopes"},"Using Scopes"),(0,a.kt)("p",null,"In some applications, we want to explore several similar problems that share several definitions and assertions. We can use the commands push and pop for doing that. Z3 maintains a global stack of declarations and assertions. The command push creates a new scope by saving the current stack size. The command pop removes any assertion or declaration performed between it and the matching push. The check-sat and get-assertions commands always operate on the content of the global stack."),(0,a.kt)("p",null,"In the following example, the command (assert p) signs an error because the pop command removed the declaration for p. If the last pop command is removed, then the error is corrected."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(declare-const z Int)\n(push)\n(assert (= (+ x y) 10))\n(assert (= (+ x (* 2 y)) 20))\n(check-sat)\n(pop) ; remove the two assertions\n(push) \n(assert (= (+ (* 3 x) y) 10))\n(assert (= (+ (* 2 x) (* 2 y)) 21))\n(check-sat)\n(declare-const p Bool)\n(pop)\n(assert p) ; error, since declaration of p was removed from the stack",result:{output:'sat\nunsat\n(error "line 15 column 8: unknown constant p")\n',error:'sat\nunsat\n(error "line 15 column 8: unknown constant p")\n',status:"z3-runtime-error",hash:"6a9618a9af1a55342294333dd46858658cc90669"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The push and pop commands can optionally receive a numeral argument as specified by the SMT 2 language."),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("p",null,"The command set-option is used to configure Z3. Z3 has several options to control its behavior. Some of these options (e.g., produce-proofs) can only be set before any declaration or assertion. We use the reset command to erase all assertions and declarations. After the reset command, all configuration options can be set."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :print-success true)\n(set-option :produce-unsat-cores true) ; enable generation of unsat cores\n(set-option :produce-models true) ; enable model generation\n(set-option :produce-proofs true) ; enable proof generation\n(declare-const x Int)\n(assert (= x 1))\n(set-option :produce-proofs false) ; error, cannot change this option after an assertion\n(echo "before reset")\n(reset)\n(set-option :produce-proofs false) ; ok',result:{output:"success\nsuccess\nsuccess\nsuccess\nsuccess\nsuccess\n(error \"line 7 column 28: error setting ':produce-proofs', option value cannot be modified after assertions have been added\")\nbefore reset\nsuccess\nsuccess\n",error:"success\nsuccess\nsuccess\nsuccess\nsuccess\nsuccess\n(error \"line 7 column 28: error setting ':produce-proofs', option value cannot be modified after assertions have been added\")\nbefore reset\nsuccess\nsuccess\n",status:"z3-runtime-error",hash:"553d0377247c5b6940b1b07a1444d484488ef16d"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The option print-success true is particularly useful when Z3 is being controlled by another application using pipes. In this mode, commands, that otherwise would not print any output, will print success."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"There is a ",(0,a.kt)("a",{parentName:"p",href:"../../programming/Parameters"},"summary of all parameters"))),(0,a.kt)("h3",{id:"additional-commands"},"Additional commands"),(0,a.kt)("p",null,"The command ",(0,a.kt)("inlineCode",{parentName:"p"},"(display t)")," just applies the Z3 pretty printer to the given expression. The command ",(0,a.kt)("inlineCode",{parentName:"p"},"(simplify t)")," displays a possibly simpler expression equivalent to t. This command accepts many different options, ",(0,a.kt)("inlineCode",{parentName:"p"},"(help simplify)")," will display all available options."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a (Array Int Int))\n(declare-const x Int)\n(declare-const y Int)\n(display (+ x 2 x 1))\n(simplify (+ x 2 x 1))\n(simplify (< (+ x y) (+ x y)))\n(simplify (< (+ x y) (+ x y)) :som true) ; put all expressions in sum-of-monomials form.\n(simplify (= x (+ y 2)) :arith-lhs true)\n(simplify (= (store (store a 1 2) 4 3)\n (store (store a 4 3) 1 2)))\n(simplify (= (store (store a 1 2) 4 3)\n (store (store a 4 3) 1 2))\n :sort-store true)\n(help simplify)",result:{output:"(+ x 2 x 1)\n(+ 3 (* 2 x))\nfalse\nfalse\n(= (+ x (* (- 1) y)) 2)\n(= (store (store a 1 2) 4 3) (store (store a 4 3) 1 2))\ntrue\n\" (simplify ( )*)\n simplify the given term using builtin theory simplification rules.\n The following options are available:\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n print (bool) (default: true) print the simplified term.\n print_proofs (bool) (default: false) print a proof showing the original term is equal to the resultant one.\n print_statistics (bool) (default: false) print statistics.\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n timeout (unsigned int) (default: infty) timeout in milliseconds. (default: 4294967295)\n\"\n",error:"",status:"z3-ran",hash:"b102313ac63df549e1cfa204923276fac4642edd"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The define-sort command defines a new sort symbol that is an abbreviation for a sort expression. The new sort symbol can be parameterized, in which case the names of the parameters are specified in the command and the sort expression uses the sort parameters. The form of the command is this"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"(define-sort ","[symbol]"," (","[symbol]","+) ","[sort]",")")),(0,a.kt)("p",null,"The following example defines several abbreviations for sort expressions."),(0,a.kt)(r(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(define-sort IList () (List Int))\n(define-sort List-Set (T) (Array (List T) Bool))\n(define-sort I () Int)\n\n(declare-const s1 (Set I))\n(declare-const s2 (List-Set Int))\n(declare-const a I)\n(declare-const l IList)\n\n(assert (= (select s1 a) true))\n(assert (= (select s2 l) false))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun s1 () (Set Int)\n ((as const (Set Int)) true))\n (define-fun s2 () (Array (List Int) Bool)\n ((as const (Array (List Int) Bool)) false))\n (define-fun a () Int\n 0)\n (define-fun l () (List Int)\n nil)\n)\n",error:"",status:"z3-ran",hash:"c6fc32f2544ad136f8acf374103cb14538e2f24a"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f71821c5.ebbf269f.js b/assets/js/f71821c5.ebbf269f.js new file mode 100644 index 000000000..bcf20de02 --- /dev/null +++ b/assets/js/f71821c5.ebbf269f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8320],{9291:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>d,toc:()=>c});var o=n(7462),a=(n(7294),n(3905)),s=n(7634),i=n.n(s);const r={title:"Basic Commands",sidebar_position:2},l=void 0,d={unversionedId:"logic/basiccommands",id:"logic/basiccommands",title:"Basic Commands",description:"The Z3 input format is an extension of the one defined by the SMT-LIB format.",source:"@site/docs-smtlib/01 - logic/02 - basiccommands.md",sourceDirName:"01 - logic",slug:"/logic/basiccommands",permalink:"/z3guide/docs/logic/basiccommands",draft:!1,editUrl:"https://github.com/microsoft/z3guide/tree/main/website/docs-smtlib/01 - logic/02 - basiccommands.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Basic Commands",sidebar_position:2},sidebar:"smtlibSidebar",previous:{title:"Introduction",permalink:"/z3guide/docs/logic/intro"},next:{title:"Propositional Logic",permalink:"/z3guide/docs/logic/propositional-logic"}},u={},c=[{value:"Using Scopes",id:"using-scopes",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Additional commands",id:"additional-commands",level:3}],m={toc:c};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"The Z3 input format is an extension of the one defined by the ",(0,a.kt)("a",{parentName:"p",href:"http://www.smtlib.org"},"SMT-LIB format"),".")),(0,a.kt)("p",null,"A Z3 script is a sequence of commands. As an extension of the SMT-LIB format, this means that Z3 is not technically a programming language in the same way that Java, Python, or Javascript are; there are no loops or variables as they are commonly understood, for example. The ",(0,a.kt)("inlineCode",{parentName:"p"},"help")," command displays a list of all available commands. The command ",(0,a.kt)("inlineCode",{parentName:"p"},"echo")," displays a message."),(0,a.kt)("p",null,"Internally, Z3 maintains a stack of user provided formulas and declarations. We say these are the assertions provided by the user. The command ",(0,a.kt)("inlineCode",{parentName:"p"},"declare-const")," declares a constant of a given type (aka sort). The command ",(0,a.kt)("inlineCode",{parentName:"p"},"declare-fun")," declares a function. In the following example, we declare a function ",(0,a.kt)("inlineCode",{parentName:"p"},"f")," that receives an integer and a Boolean and returns an integer."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(echo "starting Z3...")\n(declare-const a Int)\n(declare-fun f (Int Bool) Int)',result:{output:"starting Z3...\n",error:"",status:"z3-ran",hash:"98c95af2427b923ab2db86b390681c8d3449c7d7"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"assert")," command adds a formula to the Z3 internal stack. We say that the set of formulas in the Z3 stack is ",(0,a.kt)("em",{parentName:"p"},"satisfiable")," if there is an interpretation (for the user declared constants and functions) that makes all asserted formulas true."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-fun f (Int Bool) Int)\n(assert (< a 10))\n(assert (< (f a true) 100))\n(check-sat)",result:{output:"sat\n",error:"",status:"z3-ran",hash:"30211ffcbe31a9cf60bcb88aad8ca88b1ad1d5cd"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The first asserted formula states that the constant ",(0,a.kt)("inlineCode",{parentName:"p"},"a")," must be less than 10. The second one states that the function ",(0,a.kt)("inlineCode",{parentName:"p"},"f")," applied to ",(0,a.kt)("inlineCode",{parentName:"p"},"a")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"true")," must return a value less than 100.\nThe ",(0,a.kt)("inlineCode",{parentName:"p"},"check-sat")," command determines whether the current formulas on the Z3 stack are satisfiable or not. If the formulas are satisfiable, Z3 returns ",(0,a.kt)("inlineCode",{parentName:"p"},"sat"),". If they are not satisfiable, Z3 returns ",(0,a.kt)("inlineCode",{parentName:"p"},"unsat"),".\nZ3 may also return ",(0,a.kt)("inlineCode",{parentName:"p"},"unknown")," if it can't determine whether a formula is satisfiable or not."),(0,a.kt)("p",null,"When the ",(0,a.kt)("inlineCode",{parentName:"p"},"check-sat")," command returns ",(0,a.kt)("inlineCode",{parentName:"p"},"sat"),", the ",(0,a.kt)("inlineCode",{parentName:"p"},"get-model")," command can be used to retrieve an interpretation that makes all formulas on the Z3 internal stack true."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a Int)\n(declare-fun f (Int Bool) Int)\n(assert (< a 10))\n(assert (> (f a true) 100))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun a () Int\n 0)\n (define-fun f ((x!0 Int) (x!1 Bool)) Int\n 101)\n)\n",error:"",status:"z3-ran",hash:"d64919bedfd2d04fdafde23bd1e5099397eab633"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The interpretation is provided using definitions. For example, the definition"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"}," (define-fun a () Int ","[val]",")")),(0,a.kt)("p",null,"states that the value of a in the model is ","[val]",". The definition"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"(define-fun f ((x!1 Int) (x!2 Bool)) Int\n...\n)")),(0,a.kt)("p",null,"is very similar to a function definition used in programming languages. In this example, x!1 and x!2 are the arguments of the function interpretation created by Z3. For this simple example, the definition of f is based on ite's (aka if-then-elses or conditional expressions). For example, the expression"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"(ite (and (= x!1 11) (= x!2 false)) 21 0)")),(0,a.kt)("p",null,"evaluates to (returns) 21 when x!1 is equal to 11, and x!2 is equal to false. Otherwise, it returns 0."),(0,a.kt)("h2",{id:"using-scopes"},"Using Scopes"),(0,a.kt)("p",null,"In some applications, we want to explore several similar problems that share several definitions and assertions.\nWe can use the commands ",(0,a.kt)("inlineCode",{parentName:"p"},"push")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"pop")," for doing that. Z3 maintains a global stack of declarations and assertions.\nThe ",(0,a.kt)("inlineCode",{parentName:"p"},"push")," command creates a new scope by saving the current stack size.\nThe ",(0,a.kt)("inlineCode",{parentName:"p"},"pop")," command removes any assertion or declaration performed between it and the matching ",(0,a.kt)("inlineCode",{parentName:"p"},"push"),".\nThe ",(0,a.kt)("inlineCode",{parentName:"p"},"check-sat")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"get-assertions")," commands always operate on the content of the global stack."),(0,a.kt)("p",null,"In the following example, the command ",(0,a.kt)("inlineCode",{parentName:"p"},"(assert p)")," gives an error because ",(0,a.kt)("inlineCode",{parentName:"p"},"pop")," removed the declaration for p.\nIf the last ",(0,a.kt)("inlineCode",{parentName:"p"},"pop")," command is removed, then the error is corrected."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const x Int)\n(declare-const y Int)\n(declare-const z Int)\n(push)\n(assert (= (+ x y) 10))\n(assert (= (+ x (* 2 y)) 20))\n(check-sat)\n(pop) ; remove the two assertions\n(push) \n(assert (= (+ (* 3 x) y) 10))\n(assert (= (+ (* 2 x) (* 2 y)) 21))\n(check-sat)\n(declare-const p Bool)\n(pop)\n(assert p) ; error, since declaration of p was removed from the stack",result:{output:'sat\nunsat\n(error "line 15 column 8: unknown constant p")\n',error:'sat\nunsat\n(error "line 15 column 8: unknown constant p")\n',status:"z3-runtime-error",hash:"6a9618a9af1a55342294333dd46858658cc90669"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"push")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"pop")," commands can optionally receive a numeral argument\nindicating how many stack levels to push or pop,\nas specified by the SMT 2 language."),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"set-option")," command is used to configure Z3.\nZ3 has several options to control its behavior.\nSome of these options (e.g., produce-proofs) can only be set before any declaration or assertion. We use the ",(0,a.kt)("inlineCode",{parentName:"p"},"reset")," command to erase all assertions and declarations. After ",(0,a.kt)("inlineCode",{parentName:"p"},"reset"),", all configuration options can be set."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:'(set-option :print-success true)\n(set-option :produce-unsat-cores true) ; enable generation of unsat cores\n(set-option :produce-models true) ; enable model generation\n(set-option :produce-proofs true) ; enable proof generation\n(declare-const x Int)\n(assert (= x 1))\n(set-option :produce-proofs false) ; error, cannot change this option after an assertion\n(echo "before reset")\n(reset)\n(set-option :produce-proofs false) ; ok',result:{output:"success\nsuccess\nsuccess\nsuccess\nsuccess\nsuccess\n(error \"line 7 column 28: error setting ':produce-proofs', option value cannot be modified after assertions have been added\")\nbefore reset\nsuccess\nsuccess\n",error:"success\nsuccess\nsuccess\nsuccess\nsuccess\nsuccess\n(error \"line 7 column 28: error setting ':produce-proofs', option value cannot be modified after assertions have been added\")\nbefore reset\nsuccess\nsuccess\n",status:"z3-runtime-error",hash:"553d0377247c5b6940b1b07a1444d484488ef16d"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"print-success true")," option is particularly useful when Z3 is being controlled by another application using pipes. In this mode, commands that otherwise would not print any output, will print ",(0,a.kt)("inlineCode",{parentName:"p"},"success"),"."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Here is a ",(0,a.kt)("a",{parentName:"p",href:"../../programming/Parameters"},"summary of all parameters"))),(0,a.kt)("h3",{id:"additional-commands"},"Additional commands"),(0,a.kt)("p",null,"The command ",(0,a.kt)("inlineCode",{parentName:"p"},"(display t)")," just applies the Z3 pretty printer to the given expression. The command ",(0,a.kt)("inlineCode",{parentName:"p"},"(simplify t)")," displays a possibly simpler expression equivalent to t. This command accepts many different options, and ",(0,a.kt)("inlineCode",{parentName:"p"},"(help simplify)")," will display all available options."),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(declare-const a (Array Int Int))\n(declare-const x Int)\n(declare-const y Int)\n(display (+ x 2 x 1))\n(simplify (+ x 2 x 1))\n(simplify (< (+ x y) (+ x y)))\n(simplify (< (+ x y) (+ x y)) :som true) ; put all expressions in sum-of-monomials form.\n(simplify (= x (+ y 2)) :arith-lhs true)\n(simplify (= (store (store a 1 2) 4 3)\n (store (store a 4 3) 1 2)))\n(simplify (= (store (store a 1 2) 4 3)\n (store (store a 4 3) 1 2))\n :sort-store true)\n(help simplify)",result:{output:"(+ x 2 x 1)\n(+ 3 (* 2 x))\nfalse\nfalse\n(= (+ x (* (- 1) y)) 2)\n(= (store (store a 1 2) 4 3) (store (store a 4 3) 1 2))\ntrue\n\" (simplify ( )*)\n simplify the given term using builtin theory simplification rules.\n The following options are available:\n algebraic_number_evaluator (bool) simplify/evaluate expressions containing (algebraic) irrational numbers. (default: true)\n arith_ineq_lhs (bool) rewrite inequalities so that right-hand-side is a constant. (default: false)\n arith_lhs (bool) all monomials are moved to the left-hand-side, and the right-hand-side is just a constant. (default: false)\n bit2bool (bool) try to convert bit-vector terms of size 1 into Boolean terms (default: true)\n blast_distinct (bool) expand a distinct predicate into a quadratic number of disequalities (default: false)\n blast_distinct_threshold (unsigned int) when blast_distinct is true, only distinct expressions with less than this number of arguments are blasted (default: 4294967295)\n blast_eq_value (bool) blast (some) Bit-vector equalities into bits (default: false)\n blast_select_store (bool) eagerly replace all (select (store ..) ..) term by an if-then-else term (default: false)\n bv_extract_prop (bool) attempt to partially propagate extraction inwards (default: false)\n bv_ineq_consistency_test_max (unsigned int) max size of conjunctions on which to perform consistency test based on inequalities on bitvectors. (default: 0)\n bv_ite2id (bool) rewrite ite that can be simplified to identity (default: false)\n bv_le2extract (bool) disassemble bvule to extract (default: true)\n bv_le_extra (bool) additional bu_(u/s)le simplifications (default: false)\n bv_not_simpl (bool) apply simplifications for bvnot (default: false)\n bv_sort_ac (bool) sort the arguments of all AC operators (default: false)\n cache_all (bool) cache all intermediate results. (default: false)\n elim_and (bool) conjunctions are rewritten using negation and disjunctions (default: false)\n elim_ite (bool) eliminate ite in favor of and/or (default: true)\n elim_rem (bool) replace (rem x y) with (ite (>= y 0) (mod x y) (- (mod x y))). (default: false)\n elim_sign_ext (bool) expand sign-ext operator using concat and extract (default: true)\n elim_to_real (bool) eliminate to_real from arithmetic predicates that contain only integers. (default: false)\n eq2ineq (bool) expand equalities into two inequalities (default: false)\n expand_nested_stores (bool) replace nested stores by a lambda expression (default: false)\n expand_power (bool) expand (^ t k) into (* t ... t) if 1 < k <= max_degree. (default: false)\n expand_select_ite (bool) expand select over ite expressions (default: false)\n expand_select_store (bool) conservatively replace a (select (store ...) ...) term by an if-then-else term (default: false)\n expand_store_eq (bool) reduce (store ...) = (store ...) with a common base into selects (default: false)\n expand_tan (bool) replace (tan x) with (/ (sin x) (cos x)). (default: false)\n flat (bool) create nary applications for +,*,bvadd,bvmul,bvand,bvor,bvxor (default: true)\n flat_and_or (bool) create nary applications for and,or (default: true)\n gcd_rounding (bool) use gcd rounding on integer arithmetic atoms. (default: false)\n hi_div0 (bool) use the 'hardware interpretation' for division by zero (for bit-vector terms) (default: true)\n hoist_ite (bool) hoist shared summands under ite expressions (default: false)\n hoist_mul (bool) hoist multiplication over summation to minimize number of multiplications (default: false)\n ignore_patterns_on_ground_qbody (bool) ignores patterns on quantifiers that don't mention their bound variables. (default: true)\n ite_extra_rules (bool) extra ite simplifications, these additional simplifications may reduce size locally but increase globally (default: true)\n local_ctx (bool) perform local (i.e., cheap) context simplifications (default: false)\n local_ctx_limit (unsigned int) limit for applying local context simplifier (default: 4294967295)\n max_degree (unsigned int) max degree of algebraic numbers (and power operators) processed by simplifier. (default: 64)\n max_memory (unsigned int) maximum amount of memory in megabytes (default: 4294967295)\n max_steps (unsigned int) maximum number of steps (default: 4294967295)\n mul2concat (bool) replace multiplication by a power of two into a concatenation (default: false)\n mul_to_power (bool) collpase (* t ... t) into (^ t k), it is ignored if expand_power is true. (default: false)\n print (bool) (default: true) print the simplified term.\n print_proofs (bool) (default: false) print a proof showing the original term is equal to the resultant one.\n print_statistics (bool) (default: false) print statistics.\n pull_cheap_ite (bool) pull if-then-else terms when cheap. (default: false)\n push_ite_arith (bool) push if-then-else over arithmetic terms. (default: false)\n push_ite_bv (bool) push if-then-else over bit-vector terms. (default: false)\n push_to_real (bool) distribute to_real over * and +. (default: true)\n rewrite_patterns (bool) rewrite patterns. (default: false)\n som (bool) put polynomials in sum-of-monomials form (default: false)\n som_blowup (unsigned int) maximum increase of monomials generated when putting a polynomial in sum-of-monomials normal form (default: 10)\n sort_store (bool) sort nested stores when the indices are known to be different (default: false)\n sort_sums (bool) sort the arguments of + application. (default: false)\n split_concat_eq (bool) split equalities of the form (= (concat t1 t2) t3) (default: false)\n timeout (unsigned int) (default: infty) timeout in milliseconds. (default: 4294967295)\n\"\n",error:"",status:"z3-ran",hash:"b102313ac63df549e1cfa204923276fac4642edd"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}),(0,a.kt)("p",null,"The define-sort command defines a new sort symbol that is an abbreviation for a sort expression. The new sort symbol can be parameterized, in which case the names of the parameters are specified in the command and the sort expression uses the sort parameters. The form of the command is this"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"(define-sort ","[symbol]"," (","[symbol]","+) ","[sort]",")")),(0,a.kt)("p",null,"The following example defines several abbreviations for sort expressions:"),(0,a.kt)(i(),{input:{lang:"z3",highlight:"clojure",statusCodes:{success:"z3-ran",timeout:"z3-timed-out",runError:"z3-failed",runtimeError:"z3-runtime-error"},code:"(define-sort IList () (List Int))\n(define-sort List-Set (T) (Array (List T) Bool))\n(define-sort I () Int)\n\n(declare-const s1 (Set I))\n(declare-const s2 (List-Set Int))\n(declare-const a I)\n(declare-const l IList)\n\n(assert (= (select s1 a) true))\n(assert (= (select s2 l) false))\n(check-sat)\n(get-model)",result:{output:"sat\n(\n (define-fun s1 () (Set Int)\n ((as const (Set Int)) true))\n (define-fun s2 () (Array (List Int) Bool)\n ((as const (Array (List Int) Bool)) false))\n (define-fun a () Int\n 0)\n (define-fun l () (List Int)\n nil)\n)\n",error:"",status:"z3-ran",hash:"c6fc32f2544ad136f8acf374103cb14538e2f24a"},githubRepo:"Z3Prover/z3",editable:!1,readonly:!1,showLineNumbers:!0,langVersion:"4.12.1",tool:"z3-solver"},mdxType:"CustomCodeBlock"}))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.12474421.js b/assets/js/main.33e71e89.js similarity index 99% rename from assets/js/main.12474421.js rename to assets/js/main.33e71e89.js index e2ee616c8..eb0aa7394 100644 --- a/assets/js/main.12474421.js +++ b/assets/js/main.33e71e89.js @@ -1,2 +1,2 @@ -/*! For license information please see main.12474421.js.LICENSE.txt */ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[179],{830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(7294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},8726:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8726),i=n.n(o),l=n(6887);const s={"06485bac":[()=>n.e(5617).then(n.t.bind(n,7085,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],"06c6b9ce":[()=>Promise.all([n.e(532),n.e(8592),n.e(5217)]).then(n.bind(n,8594)),"@site/docs-smtlib/03 - strategies/04 - probes.md",8594],"073a52b7":[()=>Promise.all([n.e(532),n.e(8592),n.e(9612)]).then(n.bind(n,4218)),"@site/docs-smtlib/02 - theories/01 - Arithmetic.md",4218],"0a1ab64f":[()=>Promise.all([n.e(532),n.e(8592),n.e(1649)]).then(n.bind(n,1245)),"@site/docs-smtlib/01 - logic/05 - Quantifiers.md",1245],"0a3279a5":[()=>n.e(9143).then(n.t.bind(n,3769,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"0eeec111":[()=>Promise.all([n.e(532),n.e(8592),n.e(7593)]).then(n.bind(n,2137)),"@site/docs-smtlib/02 - theories/08 - Regular Expressions.md",2137],"10abeab5":[()=>Promise.all([n.e(532),n.e(8592),n.e(4905)]).then(n.bind(n,5918)),"@site/docs-smtlib/03 - strategies/01 - intro.md",5918],"1186e8df":[()=>Promise.all([n.e(532),n.e(8592),n.e(3340)]).then(n.bind(n,9595)),"@site/docs-programming/03 - Example Programs/04 - Formula Simplification.md",9595],17896441:[()=>Promise.all([n.e(532),n.e(8592),n.e(2085),n.e(7918)]).then(n.bind(n,3332)),"@theme/DocItem",3332],"195441a5":[()=>Promise.all([n.e(532),n.e(8592),n.e(2887)]).then(n.bind(n,6928)),"@site/docs-smtlib/02 - theories/07 - Sequences.md",6928],"1a4e3797":[()=>Promise.all([n.e(532),n.e(8592),n.e(7920)]).then(n.bind(n,9172)),"@theme/SearchPage",9172],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.t.bind(n,5208,23)),"@site/src/pages/index.tsx",5208],"1f391b9e":[()=>Promise.all([n.e(532),n.e(8592),n.e(2085),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],28050364:[()=>Promise.all([n.e(8592),n.e(3182)]).then(n.bind(n,282)),"@site/src/pages/Acknowledgments.md",282],"2e0965f8":[()=>Promise.all([n.e(532),n.e(8592),n.e(1934)]).then(n.bind(n,5184)),"@site/docs-smtlib/04 - optimization/01 - intro.md",5184],"4429c81c":[()=>Promise.all([n.e(532),n.e(8592),n.e(897)]).then(n.bind(n,7050)),"@site/docs-programming/05 - API Reference.md",7050],"443667e7":[()=>Promise.all([n.e(532),n.e(8592),n.e(4626)]).then(n.bind(n,7454)),"@site/docs-smtlib/02 - theories/09 - Characters.md",7454],"45aa616d":[()=>Promise.all([n.e(532),n.e(8592),n.e(289)]).then(n.bind(n,2076)),"@site/docs-programming/03 - Example Programs/03 - SPACER.md",2076],"48fb7ea4":[()=>Promise.all([n.e(532),n.e(8592),n.e(7515)]).then(n.bind(n,4043)),"@site/docs-programming/02 - Z3 Python - Readonly/04 - Fixedpoints.md",4043],"4c5e69b3":[()=>Promise.all([n.e(532),n.e(8592),n.e(1150)]).then(n.bind(n,8518)),"@site/docs-smtlib/05 - fixedpoints/02 - basicdatalog.md",8518],"54fd2156":[()=>Promise.all([n.e(532),n.e(8592),n.e(5053)]).then(n.bind(n,3697)),"@site/docs-smtlib/01 - logic/01 - intro.md",3697],"58c54c08":[()=>Promise.all([n.e(532),n.e(8592),n.e(2030)]).then(n.bind(n,4672)),"@site/docs-smtlib/03 - strategies/06 - summary.md",4672],"5b85c3b2":[()=>Promise.all([n.e(532),n.e(8592),n.e(5223)]).then(n.bind(n,1106)),"@site/docs-smtlib/02 - theories/03 - IEEE Floats.md",1106],"5ddc85b0":[()=>Promise.all([n.e(532),n.e(8592),n.e(2219)]).then(n.bind(n,3146)),"@site/docs-programming/01 - Z3 JavaScript Examples.md",3146],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6053633b":[()=>Promise.all([n.e(532),n.e(8592),n.e(1078)]).then(n.bind(n,6906)),"@site/docs-smtlib/02 - theories/04 - Arrays.md",6906],"64721ce9":[()=>Promise.all([n.e(532),n.e(8592),n.e(3113)]).then(n.bind(n,1061)),"@site/docs-programming/02 - Z3 Python - Readonly/02 - advanced.md",1061],"6e0e5780":[()=>n.e(8926).then(n.t.bind(n,5612,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-plugin-content-docs/playground/plugin-route-context-module-100.json",5612],"700268b1":[()=>Promise.all([n.e(532),n.e(8592),n.e(7560)]).then(n.bind(n,2364)),"@site/docs-smtlib/03 - strategies/03 - tactics.md",2364],"7389dc14":[()=>Promise.all([n.e(532),n.e(8592),n.e(9326)]).then(n.bind(n,5357)),"@site/docs-smtlib/05 - fixedpoints/01 - intro.md",5357],"754b3097":[()=>Promise.all([n.e(532),n.e(8592),n.e(9291)]).then(n.bind(n,9347)),"@site/docs-smtlib/01 - logic/03 - propositional-logic.md",9347],"758a6945":[()=>Promise.all([n.e(532),n.e(8592),n.e(6885)]).then(n.bind(n,1174)),"@site/docs-smtlib/02 - theories/05 - Datatypes.md",1174],"766c6c5d":[()=>Promise.all([n.e(532),n.e(8592),n.e(1202)]).then(n.bind(n,439)),"@site/docs-smtlib/01 - logic/04 - Uninterpreted-functions-and-constants.md",439],76895455:[()=>Promise.all([n.e(532),n.e(8592),n.e(4366)]).then(n.bind(n,5957)),"@site/docs-playground/03 - test.md",5957],"7a606cbc":[()=>n.e(3399).then(n.t.bind(n,5745,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"7b689f34":[()=>Promise.all([n.e(532),n.e(8592),n.e(7864)]).then(n.bind(n,3798)),"@site/docs-programming/03 - Example Programs/05 - MBQI.md",3798],"825bcbd7":[()=>Promise.all([n.e(532),n.e(8592),n.e(344)]).then(n.bind(n,8911)),"@site/docs-smtlib/02 - theories/06 - Strings.md",8911],"87900bd0":[()=>Promise.all([n.e(532),n.e(8592),n.e(3327)]).then(n.bind(n,6617)),"@site/docs-smtlib/03 - strategies/07 - simplifiers-summary.md",6617],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9dc876bf":[()=>Promise.all([n.e(532),n.e(8592),n.e(392)]).then(n.bind(n,7224)),"@site/docs-programming/02 - Z3 Python - Readonly/01 - Introduction.md",7224],a652379a:[()=>Promise.all([n.e(532),n.e(8592),n.e(5814)]).then(n.bind(n,1947)),"@site/docs-playground/01 - Freeform Editing.md",1947],a9e3c423:[()=>n.e(4287).then(n.t.bind(n,767,19)),"~docs/programming/version-current-metadata-prop-751.json",767],adb42a35:[()=>Promise.all([n.e(532),n.e(8592),n.e(4011)]).then(n.bind(n,5747)),"@site/docs-smtlib/04 - optimization/03 - arithmeticaloptimization.md",5747],adb86f02:[()=>n.e(6731).then(n.t.bind(n,3465,19)),"/home/runner/work/z3guide/z3guide/website/.docusaurus/docusaurus-plugin-content-docs/programming/plugin-route-context-module-100.json",3465],b3502e91:[()=>Promise.all([n.e(532),n.e(8592),n.e(7500)]).then(n.bind(n,3568)),"@site/docs-programming/03 - Example Programs/01 - Cores and Satisfying Subsets.md",3568],b38a955c:[()=>Promise.all([n.e(532),n.e(8592),n.e(4026)]).then(n.bind(n,213)),"@site/docs-smtlib/01 - logic/07 - Recursive Functions.md",213],b4ec11a8:[()=>Promise.all([n.e(532),n.e(8592),n.e(843)]).then(n.bind(n,6524)),"@site/docs-programming/04 - Parameters.md",6524],b68ea0ea:[()=>Promise.all([n.e(532),n.e(8592),n.e(7968)]).then(n.bind(n,2669)),"@site/docs-playground/02 - Guess the Secret Formula.md",2669],bf5686f6:[()=>Promise.all([n.e(532),n.e(8592),n.e(3724)]).then(n.bind(n,4629)),"@site/docs-programming/03 - Example Programs/02 - User Propagator.md",4629],c3aeb5e2:[()=>Promise.all([n.e(532),n.e(8592),n.e(8764)]).then(n.bind(n,8922)),"@site/docs-smtlib/04 - optimization/04 - softconstraints.md",8922],ca36d6a6:[()=>Promise.all([n.e(532),n.e(8592),n.e(4692)]).then(n.bind(n,1921)),"@site/docs-smtlib/05 - fixedpoints/03 - engineforpdr.md",1921],cb919464:[()=>Promise.all([n.e(532),n.e(8592),n.e(1214)]).then(n.bind(n,8484)),"@site/docs-smtlib/02 - theories/02 - Bitvectors.md",8484],d074f678:[()=>n.e(3810).then(n.t.bind(n,2327,19)),"~docs/playground/version-current-metadata-prop-751.json",2327],d0f3c7cb:[()=>Promise.all([n.e(532),n.e(8592),n.e(538)]).then(n.bind(n,3607)),"@site/docs-smtlib/04 - optimization/07 - advancedtopics.md",3607],d2940f3d:[()=>Promise.all([n.e(532),n.e(8592),n.e(5647)]).then(n.bind(n,9332)),"@site/docs-smtlib/04 - optimization/05 - combiningobjectives.md",9332],d4e5791d:[()=>Promise.all([n.e(532),n.e(8592),n.e(7654)]).then(n.bind(n,9875)),"@site/docs-programming/06 - Proof Logs.md",9875],d720861d:[()=>Promise.all([n.e(532),n.e(8592),n.e(6759)]).then(n.bind(n,7258)),"@site/docs-smtlib/02 - theories/10 - Special Relations.md",7258],d7317efc:[()=>Promise.all([n.e(532),n.e(8592),n.e(2628)]).then(n.bind(n,614)),"@site/docs-smtlib/01 - logic/06 - Lambdas.md",614],e33d6ff1:[()=>Promise.all([n.e(532),n.e(8592),n.e(6932)]).then(n.bind(n,3197)),"@site/docs-smtlib/03 - strategies/02 - goals.md",3197],e643873c:[()=>Promise.all([n.e(532),n.e(8592),n.e(7454)]).then(n.bind(n,538)),"@site/docs-programming/02 - Z3 Python - Readonly/03 - Strategies.md",538],e7125874:[()=>Promise.all([n.e(532),n.e(8592),n.e(5213)]).then(n.bind(n,257)),"@site/docs-smtlib/01 - logic/08 - Conclusion.md",257],e867f36b:[()=>Promise.all([n.e(532),n.e(8592),n.e(8773)]).then(n.bind(n,7158)),"@site/docs-smtlib/04 - optimization/06 - asmallcasestudy.md",7158],ebd79e67:[()=>Promise.all([n.e(532),n.e(8592),n.e(7074)]).then(n.bind(n,2913)),"@site/docs-smtlib/04 - optimization/02 - apioptimization.md",2913],ee0ec331:[()=>Promise.all([n.e(532),n.e(8592),n.e(96)]).then(n.bind(n,7958)),"@site/docs-smtlib/03 - strategies/05 - simplifiers.md",7958],f3ee6518:[()=>Promise.all([n.e(532),n.e(8592),n.e(8073)]).then(n.bind(n,2371)),"@site/docs-smtlib/05 - fixedpoints/05 - syntax.md",2371],f71821c5:[()=>Promise.all([n.e(532),n.e(8592),n.e(8320)]).then(n.bind(n,9291)),"@site/docs-smtlib/01 - logic/02 - basiccommands.md",9291]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,c.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/z3guide/Acknowledgments",component:f("/z3guide/Acknowledgments","e10"),exact:!0},{path:"/z3guide/search",component:f("/z3guide/search","3ca"),exact:!0},{path:"/z3guide/docs",component:f("/z3guide/docs","faa"),routes:[{path:"/z3guide/docs/fixedpoints/basicdatalog",component:f("/z3guide/docs/fixedpoints/basicdatalog","53a"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/fixedpoints/engineforpdr",component:f("/z3guide/docs/fixedpoints/engineforpdr","112"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/fixedpoints/intro",component:f("/z3guide/docs/fixedpoints/intro","673"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/fixedpoints/syntax",component:f("/z3guide/docs/fixedpoints/syntax","dde"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/basiccommands",component:f("/z3guide/docs/logic/basiccommands","156"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Conclusion",component:f("/z3guide/docs/logic/Conclusion","1b6"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/intro",component:f("/z3guide/docs/logic/intro","202"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Lambdas",component:f("/z3guide/docs/logic/Lambdas","c8d"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/propositional-logic",component:f("/z3guide/docs/logic/propositional-logic","9be"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Quantifiers",component:f("/z3guide/docs/logic/Quantifiers","240"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Recursive Functions",component:f("/z3guide/docs/logic/Recursive Functions","814"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/logic/Uninterpreted-functions-and-constants",component:f("/z3guide/docs/logic/Uninterpreted-functions-and-constants","81a"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/advancedtopics",component:f("/z3guide/docs/optimization/advancedtopics","45a"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/apioptimization",component:f("/z3guide/docs/optimization/apioptimization","6fc"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/arithmeticaloptimization",component:f("/z3guide/docs/optimization/arithmeticaloptimization","0a6"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/asmallcasestudy",component:f("/z3guide/docs/optimization/asmallcasestudy","92d"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/combiningobjectives",component:f("/z3guide/docs/optimization/combiningobjectives","2fc"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/intro",component:f("/z3guide/docs/optimization/intro","8ed"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/optimization/softconstraints",component:f("/z3guide/docs/optimization/softconstraints","e75"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/goals",component:f("/z3guide/docs/strategies/goals","f29"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/intro",component:f("/z3guide/docs/strategies/intro","1ce"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/probes",component:f("/z3guide/docs/strategies/probes","701"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/simplifiers",component:f("/z3guide/docs/strategies/simplifiers","de6"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/simplifiers-summary",component:f("/z3guide/docs/strategies/simplifiers-summary","7a5"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/summary",component:f("/z3guide/docs/strategies/summary","b37"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/strategies/tactics",component:f("/z3guide/docs/strategies/tactics","13e"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Arithmetic",component:f("/z3guide/docs/theories/Arithmetic","733"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Arrays",component:f("/z3guide/docs/theories/Arrays","ae4"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Bitvectors",component:f("/z3guide/docs/theories/Bitvectors","df6"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Characters",component:f("/z3guide/docs/theories/Characters","637"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Datatypes",component:f("/z3guide/docs/theories/Datatypes","3a3"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/IEEE Floats",component:f("/z3guide/docs/theories/IEEE Floats","976"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Regular Expressions",component:f("/z3guide/docs/theories/Regular Expressions","130"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Sequences",component:f("/z3guide/docs/theories/Sequences","a3c"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Special Relations",component:f("/z3guide/docs/theories/Special Relations","d1a"),exact:!0,sidebar:"smtlibSidebar"},{path:"/z3guide/docs/theories/Strings",component:f("/z3guide/docs/theories/Strings","446"),exact:!0,sidebar:"smtlibSidebar"}]},{path:"/z3guide/playground",component:f("/z3guide/playground","163"),routes:[{path:"/z3guide/playground/Freeform Editing",component:f("/z3guide/playground/Freeform Editing","cef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/playground/Guess the Secret Formula",component:f("/z3guide/playground/Guess the Secret Formula","968"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/playground/test",component:f("/z3guide/playground/test","54f"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/z3guide/programming",component:f("/z3guide/programming","17b"),routes:[{path:"/z3guide/programming/API Reference",component:f("/z3guide/programming/API Reference","85b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/Cores and Satisfying Subsets",component:f("/z3guide/programming/Example Programs/Cores and Satisfying Subsets","d24"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/Formula Simplification",component:f("/z3guide/programming/Example Programs/Formula Simplification","40e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/MBQI",component:f("/z3guide/programming/Example Programs/MBQI","dd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/SPACER",component:f("/z3guide/programming/Example Programs/SPACER","0e3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Example Programs/User Propagator",component:f("/z3guide/programming/Example Programs/User Propagator","a24"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Parameters",component:f("/z3guide/programming/Parameters","8b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Proof Logs",component:f("/z3guide/programming/Proof Logs","26a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 JavaScript Examples",component:f("/z3guide/programming/Z3 JavaScript Examples","f53"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 Python - Readonly/advanced",component:f("/z3guide/programming/Z3 Python - Readonly/advanced","335"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 Python - Readonly/Fixedpoints",component:f("/z3guide/programming/Z3 Python - Readonly/Fixedpoints","30c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 Python - Readonly/Introduction",component:f("/z3guide/programming/Z3 Python - Readonly/Introduction","0ca"),exact:!0,sidebar:"tutorialSidebar"},{path:"/z3guide/programming/Z3 Python - Readonly/Strategies",component:f("/z3guide/programming/Z3 Python - Readonly/Strategies","5f7"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/z3guide/",component:f("/z3guide/","5da"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(833),y=n(4711),w=n(9727),E=n(3320),k=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.default)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.default)(),a=function(){const{siteConfig:{url:e}}=(0,g.default)(),{pathname:t}=(0,c.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function _(){const{i18n:{currentLocale:e}}=(0,g.default)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var P=n(8934),A=n(8940);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r(t.default?.[e]??t[e])?.(...n)));return()=>a.forEach((e=>e?.()))}const R=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(a&&function(e){const{hash:t}=e;if(t){const e=decodeURIComponent(t.substring(1));document.getElementById(e)?.scrollIntoView()}else window.scrollTo(0,0)}(n),L("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function O(e){const t=(0,d.f)(u.Z,e);return Promise.all(t.map((e=>e.route.component.preload?.())))}class z extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(R,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const N=z,I="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner-suggestion-container",D="__DOCUSAURUS_INSERT_BASEURL_BANNER";function F(e){return`\nwindow['${D}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${D}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${I}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[D]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,F(e))),r.createElement("div",{id:I}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.default)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(B,null):null}function $(){const{siteConfig:{favicon:e,title:t},i18n:{currentLocale:n,localeConfigs:a}}=(0,g.default)(),o=(0,h.Z)(e),{htmlLang:i,direction:l}=a[n];return r.createElement(m.Z,null,r.createElement("html",{lang:i,dir:l}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),e&&r.createElement("link",{rel:"icon",href:o}))}var j=n(4763);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(j.Z,null,r.createElement(A.M,null,r.createElement(P.t,null,r.createElement(f,null,r.createElement($,null),r.createElement(_,null),r.createElement(U,null),r.createElement(N,{location:T(t)},e)))))}var Z=n(6887);const V=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();(document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode)?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var G=n(9670);const W=new Set,q=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,Y={prefetch(e){if(!(e=>!K()&&!q.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(Z).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,G.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?V(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!q.has(e))(e)&&(q.add(e),O(e))},Q=Object.freeze(Y);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;O(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/z3guide/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/z3guide/docs","mainDocId":"logic/intro","docs":[{"id":"fixedpoints/basicdatalog","path":"/z3guide/docs/fixedpoints/basicdatalog","sidebar":"smtlibSidebar"},{"id":"fixedpoints/engineforpdr","path":"/z3guide/docs/fixedpoints/engineforpdr","sidebar":"smtlibSidebar"},{"id":"fixedpoints/intro","path":"/z3guide/docs/fixedpoints/intro","sidebar":"smtlibSidebar"},{"id":"fixedpoints/syntax","path":"/z3guide/docs/fixedpoints/syntax","sidebar":"smtlibSidebar"},{"id":"logic/basiccommands","path":"/z3guide/docs/logic/basiccommands","sidebar":"smtlibSidebar"},{"id":"logic/Conclusion","path":"/z3guide/docs/logic/Conclusion","sidebar":"smtlibSidebar"},{"id":"logic/intro","path":"/z3guide/docs/logic/intro","sidebar":"smtlibSidebar"},{"id":"logic/Lambdas","path":"/z3guide/docs/logic/Lambdas","sidebar":"smtlibSidebar"},{"id":"logic/propositional-logic","path":"/z3guide/docs/logic/propositional-logic","sidebar":"smtlibSidebar"},{"id":"logic/Quantifiers","path":"/z3guide/docs/logic/Quantifiers","sidebar":"smtlibSidebar"},{"id":"logic/Recursive Functions","path":"/z3guide/docs/logic/Recursive Functions","sidebar":"smtlibSidebar"},{"id":"logic/Uninterpreted-functions-and-constants","path":"/z3guide/docs/logic/Uninterpreted-functions-and-constants","sidebar":"smtlibSidebar"},{"id":"optimization/advancedtopics","path":"/z3guide/docs/optimization/advancedtopics","sidebar":"smtlibSidebar"},{"id":"optimization/apioptimization","path":"/z3guide/docs/optimization/apioptimization","sidebar":"smtlibSidebar"},{"id":"optimization/arithmeticaloptimization","path":"/z3guide/docs/optimization/arithmeticaloptimization","sidebar":"smtlibSidebar"},{"id":"optimization/asmallcasestudy","path":"/z3guide/docs/optimization/asmallcasestudy","sidebar":"smtlibSidebar"},{"id":"optimization/combiningobjectives","path":"/z3guide/docs/optimization/combiningobjectives","sidebar":"smtlibSidebar"},{"id":"optimization/intro","path":"/z3guide/docs/optimization/intro","sidebar":"smtlibSidebar"},{"id":"optimization/softconstraints","path":"/z3guide/docs/optimization/softconstraints","sidebar":"smtlibSidebar"},{"id":"strategies/goals","path":"/z3guide/docs/strategies/goals","sidebar":"smtlibSidebar"},{"id":"strategies/intro","path":"/z3guide/docs/strategies/intro","sidebar":"smtlibSidebar"},{"id":"strategies/probes","path":"/z3guide/docs/strategies/probes","sidebar":"smtlibSidebar"},{"id":"strategies/simplifiers","path":"/z3guide/docs/strategies/simplifiers","sidebar":"smtlibSidebar"},{"id":"strategies/simplifiers-summary","path":"/z3guide/docs/strategies/simplifiers-summary","sidebar":"smtlibSidebar"},{"id":"strategies/summary","path":"/z3guide/docs/strategies/summary","sidebar":"smtlibSidebar"},{"id":"strategies/tactics","path":"/z3guide/docs/strategies/tactics","sidebar":"smtlibSidebar"},{"id":"theories/Arithmetic","path":"/z3guide/docs/theories/Arithmetic","sidebar":"smtlibSidebar"},{"id":"theories/Arrays","path":"/z3guide/docs/theories/Arrays","sidebar":"smtlibSidebar"},{"id":"theories/Bitvectors","path":"/z3guide/docs/theories/Bitvectors","sidebar":"smtlibSidebar"},{"id":"theories/Characters","path":"/z3guide/docs/theories/Characters","sidebar":"smtlibSidebar"},{"id":"theories/Datatypes","path":"/z3guide/docs/theories/Datatypes","sidebar":"smtlibSidebar"},{"id":"theories/IEEE Floats","path":"/z3guide/docs/theories/IEEE Floats","sidebar":"smtlibSidebar"},{"id":"theories/Regular Expressions","path":"/z3guide/docs/theories/Regular Expressions","sidebar":"smtlibSidebar"},{"id":"theories/Sequences","path":"/z3guide/docs/theories/Sequences","sidebar":"smtlibSidebar"},{"id":"theories/Special Relations","path":"/z3guide/docs/theories/Special Relations","sidebar":"smtlibSidebar"},{"id":"theories/Strings","path":"/z3guide/docs/theories/Strings","sidebar":"smtlibSidebar"}],"draftIds":[],"sidebars":{"smtlibSidebar":{"link":{"path":"/z3guide/docs/logic/intro","label":"logic/intro"}}}}],"breadcrumbs":true},"playground":{"path":"/z3guide/playground","versions":[{"name":"current","label":"Next","isLast":true,"path":"/z3guide/playground","mainDocId":"Freeform Editing","docs":[{"id":"Freeform Editing","path":"/z3guide/playground/Freeform Editing","sidebar":"tutorialSidebar"},{"id":"Guess the Secret Formula","path":"/z3guide/playground/Guess the Secret Formula","sidebar":"tutorialSidebar"},{"id":"test","path":"/z3guide/playground/test","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/z3guide/playground/Freeform Editing","label":"Freeform Editing"}}}}],"breadcrumbs":true},"programming":{"path":"/z3guide/programming","versions":[{"name":"current","label":"Next","isLast":true,"path":"/z3guide/programming","mainDocId":"Z3 JavaScript Examples","docs":[{"id":"API Reference","path":"/z3guide/programming/API Reference","sidebar":"tutorialSidebar"},{"id":"Example Programs/Cores and Satisfying Subsets","path":"/z3guide/programming/Example Programs/Cores and Satisfying Subsets","sidebar":"tutorialSidebar"},{"id":"Example Programs/Formula Simplification","path":"/z3guide/programming/Example Programs/Formula Simplification","sidebar":"tutorialSidebar"},{"id":"Example Programs/MBQI","path":"/z3guide/programming/Example Programs/MBQI","sidebar":"tutorialSidebar"},{"id":"Example Programs/SPACER","path":"/z3guide/programming/Example Programs/SPACER","sidebar":"tutorialSidebar"},{"id":"Example Programs/User Propagator","path":"/z3guide/programming/Example Programs/User Propagator","sidebar":"tutorialSidebar"},{"id":"Parameters","path":"/z3guide/programming/Parameters","sidebar":"tutorialSidebar"},{"id":"Proof Logs","path":"/z3guide/programming/Proof Logs","sidebar":"tutorialSidebar"},{"id":"Z3 JavaScript Examples","path":"/z3guide/programming/Z3 JavaScript Examples","sidebar":"tutorialSidebar"},{"id":"Z3 Python - Readonly/advanced","path":"/z3guide/programming/Z3 Python - Readonly/advanced","sidebar":"tutorialSidebar"},{"id":"Z3 Python - Readonly/Fixedpoints","path":"/z3guide/programming/Z3 Python - Readonly/Fixedpoints","sidebar":"tutorialSidebar"},{"id":"Z3 Python - Readonly/Introduction","path":"/z3guide/programming/Z3 Python - Readonly/Introduction","sidebar":"tutorialSidebar"},{"id":"Z3 Python - Readonly/Strategies","path":"/z3guide/programming/Z3 Python - Readonly/Strategies","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/z3guide/programming/Z3 JavaScript Examples","label":"Z3 JavaScript Examples"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.0.1","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.0.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.0.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.0.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.0.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.0.1"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.0.1"},"add-z3-files":{"type":"project"},"custom-webpack-config":{"type":"project"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7294),a=n(412),o=n(5742),i=n(9803);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},r.createElement("h1",null,"This page crashed."),r.createElement("p",null,t.message),r.createElement("button",{type:"button",onClick:n},"Try again"))}function s(e){let{error:t,tryAgain:n}=e;return r.createElement(c,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(i.default,null,r.createElement(l,{error:t,tryAgain:n})))}const u=e=>r.createElement(s,e);class c extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??u)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=a.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.default)(),{withBaseUrl:E}=(0,d.C)(),k=(0,a.useContext)(c),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=f||p;const _=(0,s.Z)(x),C=x?.replace("pathname://","");let T=void 0!==C?(P=C,b&&(e=>e.startsWith("/"))(P)?E(P):P):void 0;var P;T&&_&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const A=(0,a.useRef)(!1),L=n?o.OL:o.rU,R=u.Z.canUseIntersectionObserver,O=(0,a.useRef)();(0,a.useEffect)((()=>(!R&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{R&&O.current&&O.current.disconnect()})),[O,T,R,_]);const z=T?.startsWith("#")??!1,N=!T||!_||z;return N||h||k.collectLink(T),N?a.createElement("a",(0,r.Z)({ref:S,href:T},x&&!_&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(L,(0,r.Z)({},v,{onMouseEnter:()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)},innerRef:e=>{S.current=e,R&&e&&_&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),O.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>o,Z:()=>i});var r=n(2263),a=n(3919);function o(){const{siteConfig:{baseUrl:e,url:t}}=(0,r.default)();return{withBaseUrl:(n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)}}function i(e,t){void 0===t&&(t={});const{withBaseUrl:n}=o();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});function r(e){const t={};return function e(n,r){Object.entries(n).forEach((n=>{let[a,o]=n;const i=r?`${r}.${a}`:a;var l;"object"==typeof(l=o)&&l&&Object.keys(l).length>0?e(o,i):t[i]=o}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>p,WS:()=>m,_r:()=>d,Jo:()=>v,zh:()=>f,yW:()=>h,gB:()=>g});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.default)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function u(e,t){const n=s(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const c={},d=()=>i("docusaurus-plugin-content-docs")??c,f=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e)?.[t];if(!r&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return r}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function m(e){void 0===e&&(e={});const t=p(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:s(t.pluginData,n)}}function g(e){return f(e).versions}function h(e){const t=f(e);return l(t)}function b(e){const t=f(e),{pathname:n}=(0,r.TH)();return u(t,n)}function v(e){const t=f(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:u(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(4961)(`./prism-${e}`)})),delete globalThis.Prism}(r.default)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a="iconExternalLink_nPIU";function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},9803:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>kt});var r=n(7294),a=n(6010),o=n(4763),i=n(833),l=n(5281),s=n(9727),u=n(5999),c=n(6550),d=n(5936);function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}const p="skipToContent_fXgn";function m(){const{containerRef:e,handleSkip:t}=function(){const e=(0,r.useRef)(null),{action:t}=(0,c.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.querySelector(`.${l.k.wrapper.main}`);t&&f(t)}),[]);return(0,d.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,handleSkip:n}}();return r.createElement("div",{ref:e,role:"region"},r.createElement("a",{href:"#",className:p,onClick:t},r.createElement(u.Z,{id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"},"Skip to main content")))}var g=n(6668),h=n(9689),b=n(7462);function v(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...l}=e;return r.createElement("svg",(0,b.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const y="announcementBar_mb4j",w="announcementBarPlaceholder_vyr4",E="announcementBarClose_gvF7",k="announcementBarContent_xLdY";function S(){const{isActive:e,close:t}=(0,h.nT)(),{announcementBar:n}=(0,g.L)();if(!e)return null;const{content:o,backgroundColor:i,textColor:l,isCloseable:s}=n;return r.createElement("div",{className:y,style:{backgroundColor:i,color:l},role:"banner"},s&&r.createElement("div",{className:w}),r.createElement("div",{className:k,dangerouslySetInnerHTML:{__html:o}}),s?r.createElement("button",{type:"button",className:(0,a.default)("clean-btn close",E),onClick:t,"aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},r.createElement(v,{width:14,height:14,strokeWidth:3.1})):null)}var x=n(2961),_=n(2466);var C=n(902),T=n(3102);const P=r.createContext(null);function A(e){let{children:t}=e;const n=function(){const e=(0,x.e)(),t=(0,T.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,C.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(P.Provider,{value:n},t)}function L(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function R(){const e=(0,r.useContext)(P);if(!e)throw new C.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,T.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:L(o)})),[a,o,t])}function O(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=R();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.default)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var z=n(2949),N=n(2389);function I(e){return r.createElement("svg",(0,b.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function M(e){return r.createElement("svg",(0,b.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const D={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function F(e){let{className:t,value:n,onChange:o}=e;const i=(0,N.default)(),l=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.default)(D.toggle,t)},r.createElement("button",{className:(0,a.default)("clean-btn",D.toggleButton,!i&&D.toggleButtonDisabled),type:"button",onClick:()=>o("dark"===n?"light":"dark"),disabled:!i,title:l,"aria-label":l},r.createElement(I,{className:(0,a.default)(D.toggleIcon,D.lightToggleIcon)}),r.createElement(M,{className:(0,a.default)(D.toggleIcon,D.darkToggleIcon)})))}const B=r.memo(F);function U(e){let{className:t}=e;const n=(0,g.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,z.I)();return n?null:r.createElement(B,{className:t,value:a,onChange:o})}var $=n(1327);function j(){return r.createElement($.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function H(){const e=(0,x.e)();return r.createElement("button",{type:"button",className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(v,{color:"var(--ifm-color-emphasis-600)"}))}function Z(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(j,null),r.createElement(U,{className:"margin-right--md"}),r.createElement(H,null))}var V=n(9960),G=n(4996),W=n(3919),q=n(8022),K=n(9471);function Y(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:l,isDropdownLink:s,prependBaseUrlToHref:u,...c}=e;const d=(0,G.Z)(a),f=(0,G.Z)(t),p=(0,G.Z)(o,{forcePrependBaseUrl:!0}),m=i&&o&&!(0,W.Z)(o),g=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,i,m&&r.createElement(K.Z,s&&{width:12,height:12}))};return o?r.createElement(V.default,(0,b.Z)({href:u?p:o},c,g)):r.createElement(V.default,(0,b.Z)({to:d,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?(0,q.F)(n,t.pathname):t.pathname.startsWith(f)},c,g))}function Q(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(Y,(0,b.Z)({className:(0,a.default)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function X(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(Y,(0,b.Z)({className:(0,a.default)("menu__link",t)},o)))}function J(e){let{mobile:t=!1,position:n,...a}=e;const o=t?X:Q;return r.createElement(o,(0,b.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ee=n(6043),te=n(8596),ne=n(2263);function re(e,t){return e.some((e=>function(e,t){return!!(0,te.Mg)(e.to,t)||!!(0,q.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ae(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,c]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&c(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[s]),r.createElement("div",{ref:s,className:(0,a.default)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(Y,(0,b.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.default)("navbar__link",o)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),c(!u))}}),l.children??l.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>r.createElement(Me,(0,b.Z)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),c(!1);const t=s.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function oe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const s=function(){const{siteConfig:{baseUrl:e}}=(0,ne.default)(),{pathname:t}=(0,c.TH)();return t.replace(e,"/")}(),u=re(t,s),{collapsed:d,toggleCollapsed:f,setCollapsed:p}=(0,ee.u)({initialState:()=>!u});return(0,r.useEffect)((()=>{u&&p(!u)}),[s,u,p]),r.createElement("li",{className:(0,a.default)("menu__list-item",{"menu__list-item--collapsed":d})},r.createElement(Y,(0,b.Z)({role:"button",className:(0,a.default)("menu__link menu__link--sublist menu__link--sublist-caret",n)},l,{onClick:e=>{e.preventDefault(),f()}}),l.children??l.label),r.createElement(ee.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:d},t.map(((e,t)=>r.createElement(Me,(0,b.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function ie(e){let{mobile:t=!1,...n}=e;const a=t?oe:ae;return r.createElement(a,n)}var le=n(4711);function se(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,b.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ue="iconLanguage_nlXk";var ce=n(3935),de=n(5742),fe=n(6177);function pe(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var me=n(830),ge=["translations"];function he(){return he=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var we="Ctrl";var Ee=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=ye(e,ge),i=a.buttonText,l=void 0===i?"Search":i,s=a.buttonAriaLabel,u=void 0===s?"Search":s,c=be((0,r.useState)(null),2),d=c[0],f=c[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?f("\u2318"):f(we))}),[]),r.createElement("button",he({type:"button",className:"DocSearch DocSearch-Button","aria-label":u},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(me.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},l)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===we?r.createElement(pe,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),ke=n(3320);const Se={button:{buttonText:(0,u.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,u.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,u.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,u.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,u.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,u.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,u.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,u.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,u.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,u.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,u.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,u.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,u.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,u.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,u.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,u.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,u.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,u.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,u.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,u.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,u.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,u.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,u.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,u.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,u.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,u.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,u.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let xe=null;function _e(e){let{hit:t,children:n}=e;return r.createElement(V.default,{to:t.url},n)}function Ce(e){let{state:t,onClose:n}=e;const{generateSearchPageLink:a}=(0,fe.O)();return r.createElement(V.default,{to:a(t.query),onClick:n},r.createElement(u.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function Te(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:i}=(0,ne.default)(),l=function(){const{locale:e,tags:t}=(0,ke._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),s=o.searchParameters?.facetFilters??[],u=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(l,s):s,d={...o.searchParameters,facetFilters:u},{withBaseUrl:f}=(0,G.C)(),p=(0,c.k6)(),m=(0,r.useRef)(null),g=(0,r.useRef)(null),[h,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)(void 0),E=(0,r.useCallback)((()=>xe?Promise.resolve():Promise.all([n.e(6780).then(n.bind(n,6780)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,6945)),Promise.all([n.e(532),n.e(8894)]).then(n.bind(n,8894))]).then((e=>{let[{DocSearchModal:t}]=e;xe=t}))),[]),k=(0,r.useCallback)((()=>{E().then((()=>{m.current=document.createElement("div"),document.body.insertBefore(m.current,document.body.firstChild),v(!0)}))}),[E,v]),S=(0,r.useCallback)((()=>{v(!1),m.current?.remove()}),[v]),x=(0,r.useCallback)((e=>{E().then((()=>{v(!0),w(e.key)}))}),[E,v,w]),_=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,q.F)(a,t)?window.location.href=t:p.push(t)}}).current,C=(0,r.useRef)((e=>e.map((e=>{if((0,q.F)(a,e.url))return e;const t=new URL(e.url);return{...e,url:f(`${t.pathname}${t.hash}`)}})))).current,T=(0,r.useMemo)((()=>e=>r.createElement(Ce,(0,b.Z)({},e,{onClose:S}))),[S]),P=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){(27===e.keyCode&&t||"k"===e.key.toLowerCase()&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:h,onOpen:k,onClose:S,onInput:x,searchButtonRef:g}),r.createElement(r.Fragment,null,r.createElement(de.Z,null,r.createElement("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})),r.createElement(Ee,{onTouchStart:E,onFocus:E,onMouseOver:E,onClick:k,ref:g,translations:Se.button}),h&&xe&&m.current&&(0,ce.createPortal)(r.createElement(xe,(0,b.Z)({onClose:S,initialScrollY:window.scrollY,initialQuery:y,navigator:_,transformItems:C,hitComponent:_e,transformSearchClient:P},o.searchPagePath&&{resultsFooterComponent:T},o,{searchParameters:d,placeholder:Se.placeholder,translations:Se.modal})),m.current))}function Pe(){const{siteConfig:e}=(0,ne.default)();return r.createElement(Te,e.themeConfig.algolia)}const Ae="searchBox_ZlJk";function Le(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.default)(n,Ae)},t)}var Re=n(143),Oe=n(3438);var ze=n(373);const Ne=e=>e.docs.find((t=>t.id===e.mainDocId));const Ie={default:J,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:l,localeConfigs:s}}=(0,ne.default)(),c=(0,le.l)(),d=[...n,...l.map((e=>{const n=`pathname://${c.createUrl({locale:e,fullyQualified:!1})}`;return{label:s[e].label,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],f=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):s[i].label;return r.createElement(ie,(0,b.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(se,{className:ue}),f),items:d}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(Le,{className:n},r.createElement(Pe,null))},dropdown:ie,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.default)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Re.Iw)(a),l=(0,Oe.vY)(t,a);return null===l?null:r.createElement(J,(0,b.Z)({exact:!0},o,{isActive:()=>i?.path===l.path||!!i?.sidebar&&i.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Re.Iw)(a),l=(0,Oe.oz)(t,a).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(J,(0,b.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,Oe.lO)(a)[0],l=t??i.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(J,(0,b.Z)({},o,{label:l,to:s}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...l}=e;const s=(0,Re.Iw)(n),c=(0,Re.gB)(n),{savePreferredVersionName:d}=(0,ze.J)(n),f=[...o,...c.map((e=>{const t=s.alternateDocVersions[e.name]??Ne(e);return{label:e.label,to:t.path,isActive:()=>e===s.activeVersion,onClick:()=>d(e.name)}})),...i],p=(0,Oe.lO)(n)[0],m=t&&f.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):p.label,g=t&&f.length>1?void 0:Ne(p).path;return f.length<=1?r.createElement(J,(0,b.Z)({},l,{mobile:t,label:m,to:g,isActive:a?()=>!1:void 0})):r.createElement(ie,(0,b.Z)({},l,{mobile:t,label:m,to:g,items:f,isActive:a?()=>!1:void 0}))}};function Me(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ie[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function De(){const e=(0,x.e)(),t=(0,g.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Me,(0,b.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Fe(e){return r.createElement("button",(0,b.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Be(){const e=0===(0,g.L)().navbar.items.length,t=R();return r.createElement(r.Fragment,null,!e&&r.createElement(Fe,{onClick:()=>t.hide()}),t.content)}function Ue(){const e=(0,x.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(O,{header:r.createElement(Z,null),primaryMenu:r.createElement(De,null),secondaryMenu:r.createElement(Be,null)}):null}const $e="navbarHideable_m1mJ",je="navbarHidden_jGov";function He(e){return r.createElement("div",(0,b.Z)({role:"presentation"},e,{className:(0,a.default)("navbar-sidebar__backdrop",e.className)}))}function Ze(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,g.L)(),i=(0,x.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,_.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(e)return t.location.hash?(a.current=!0,void n(!1)):void n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,className:(0,a.default)("navbar","navbar--fixed-top",n&&[$e,!s&&je],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(He,{onClick:i.toggle}),r.createElement(Ue,null))}function Ve(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,b.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Ge(){const e=(0,x.e)();return r.createElement("button",{onClick:e.toggle,onKeyDown:e.toggle,"aria-label":"Navigation bar toggle",className:"navbar__toggle clean-btn",type:"button",tabIndex:0},r.createElement(Ve,null))}const We="colorModeToggle_DEke";function qe(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Me,(0,b.Z)({},e,{key:t})))))}function Ke(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Ye(){const e=(0,x.e)(),t=(0,g.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(Ke,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Ge,null),r.createElement(j,null),r.createElement(qe,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(qe,{items:a}),r.createElement(U,{className:We}),!o&&r.createElement(Le,null,r.createElement(Pe,null)))})}function Qe(){return r.createElement(Ze,null,r.createElement(Ye,null))}var Xe=n(2489);function Je(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...l}=t,s=(0,G.Z)(n),u=(0,G.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(V.default,(0,b.Z)({className:"footer__link-item"},a?{href:i?u:a}:{to:s},l),o,a&&!(0,W.Z)(a)&&r.createElement(K.Z,null))}function et(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Je,{item:t}))}function tt(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(et,{key:t,item:e})))))}function nt(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(tt,{key:t,column:e}))))}function rt(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function at(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Je,{item:t})}function ot(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(at,{item:e}),t.length!==n+1&&r.createElement(rt,null))))))}function it(e){let{links:t}=e;return(0,Xe.a)(t)?r.createElement(nt,{columns:t}):r.createElement(ot,{links:t})}var lt=n(941);const st="footerLogoLink_BH7S";function ut(e){let{logo:t}=e;const{withBaseUrl:n}=(0,G.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(lt.Z,{className:(0,a.default)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function ct(e){let{logo:t}=e;return t.href?r.createElement(V.default,{href:t.href,className:st,target:t.target},r.createElement(ut,{logo:t})):r.createElement(ut,{logo:t})}function dt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ft(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.default)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function pt(){const{footer:e}=(0,g.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(ft,{style:o,links:n&&n.length>0&&r.createElement(it,{links:n}),logo:a&&r.createElement(ct,{logo:a}),copyright:t&&r.createElement(dt,{copyright:t})})}const mt=r.memo(pt);var gt=n(12);const ht="docusaurus.tab.",bt=r.createContext(void 0);const vt=(0,C.Qc)([z.S,h.pl,function(e){let{children:t}=e;const n=function(){const[e,t]=(0,r.useState)({}),n=(0,r.useCallback)(((e,t)=>{(0,gt.W)(`${ht}${e}`).set(t)}),[]);(0,r.useEffect)((()=>{try{const e={};(0,gt._)().forEach((t=>{if(t.startsWith(ht)){const n=t.substring(ht.length);e[n]=(0,gt.W)(t).get()}})),t(e)}catch(e){console.error(e)}}),[]);const a=(0,r.useCallback)(((e,r)=>{t((t=>({...t,[e]:r}))),n(e,r)}),[n]);return(0,r.useMemo)((()=>({tabGroupChoices:e,setTabGroupChoices:a})),[e,a])}();return r.createElement(bt.Provider,{value:n},t)},_.OC,ze.L5,i.VC,function(e){let{children:t}=e;return r.createElement(T.n2,null,r.createElement(x.M,null,r.createElement(A,null,t)))}]);function yt(e){let{children:t}=e;return r.createElement(vt,null,t)}function wt(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const Et="mainWrapper_z2l0";function kt(e){const{children:t,noFooter:n,wrapperClassName:u,title:c,description:d}=e;return(0,s.t)(),r.createElement(yt,null,r.createElement(i.d,{title:c,description:d}),r.createElement(m,null),r.createElement(S,null),r.createElement(Qe,null),r.createElement("div",{className:(0,a.default)(l.k.wrapper.main,Et,u)},r.createElement(o.Z,{fallback:e=>r.createElement(wt,e)},t)),!n&&r.createElement(mt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),u=n(941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(u.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.default)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),g=n?"":t,h=u?.alt??g;return a.createElement(o.default,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.default)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.default)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,z:()=>m});var r=n(7462),a=n(7294),o=n(412);function i(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const l={display:"none",overflow:"hidden",height:"0px"},s={display:"block",overflow:"visible",height:"auto"};function u(e,t){const n=t?l:s;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function c(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??"ease-in-out"}`,height:`${t}px`}}function i(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return u(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=l.height,e.style.overflow=l.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function d(e){if(!o.Z.canUseDOM)return e?l:s}function f(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const f=(0,a.useRef)(null);return c({collapsibleRef:f,collapsed:n,animation:o}),a.createElement(t,{ref:f,style:s?void 0:d(n),onTransitionEnd:e=>{"height"===e.propertyName&&(u(f.current,n),i?.(n))},className:l},r)}function p(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(f,(0,r.Z)({},n,{collapsed:l})):null}function m(e){let{lazy:t,...n}=e;const r=t?p:f;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.W)("docusaurus.announcement.dismiss"),u=(0,o.W)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.default)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.W)(u),d="light",f="dark",p=e=>e===f?f:d;function m(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,i]=(0,r.useState)((e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e))(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(i(t),a&&(e=>{c.set(p(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f:d:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&s(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const m=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||m.current?m.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:s,get isDarkTheme(){return o===f},setLightTheme(){s(d)},setDarkTheme(){s(f)}})),[o,s])}function g(e){let{children:t}=e;const n=m();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>b,Oh:()=>w});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(3438),s=n(902),u=n(12);const c=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,u.W)(c(e),{persistence:t}).set(n)},f=(e,t)=>(0,u.W)(c(e),{persistence:t}).get(),p=(e,t)=>{(0,u.W)(c(e),{persistence:t}).del()};const m=r.createContext(null);function g(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return r.createElement(m.Provider,{value:n},t)}function b(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function v(){const e=(0,r.useContext)(m);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=v(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function w(){const e=(0,a._r)(),[t]=v();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),a=n(3102),o=n(7524),i=n(6550),l=n(902);function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6668);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},6177:(e,t,n)=>{"use strict";n.d(t,{O:()=>l});var r=n(7294),a=n(6550),o=n(2263);const i="q";function l(){const e=(0,a.k6)(),{siteConfig:{baseUrl:t}}=(0,o.default)(),[n,l]=(0,r.useState)("");(0,r.useEffect)((()=>{const e=new URLSearchParams(window.location.search).get(i)??"";l(e)}),[]);return{searchQuery:n,setSearchQuery:(0,r.useCallback)((t=>{const n=new URLSearchParams(window.location.search);t?n.set(i,t):n.delete(i),e.replace({search:n.toString()}),l(t)}),[e]),generateSearchPageLink:(0,r.useCallback)((e=>`${t}search?${i}=${encodeURIComponent(e)}`),[t])}}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(412);const o="desktop",i="mobile",l="ssr";function s(){return a.Z.canUseDOM?window.innerWidth>996?o:i:l}function u(){const[e,t]=(0,r.useState)((()=>s()));return(0,r.useEffect)((()=>{function e(){t(s())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},3438:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>p,_F:()=>h,cE:()=>d,hI:()=>E,jA:()=>m,lO:()=>v,oz:()=>y,s1:()=>b,vY:()=>w});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(1116),u=n(7392),c=n(8596);const d=!!i._r;function f(e,t){for(const n of e)if("category"===n.type){if(t(n))return n;const e=f(n.items,t);if(e)return e}}function p(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=p(t);if(e)return e}}}function m(){const{pathname:e}=(0,a.TH)(),t=(0,s.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=f(t.items,(t=>(0,c.Mg)(t.href,e)));if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,c.Mg)(e,t);function h(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||((e,t)=>e.some((e=>h(e,t))))(e.items,t))}function b(){const e=(0,s.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;if(!1===n||!e)return null;const r=[];return function e(n){for(const a of n)if("category"===a.type&&((0,c.Mg)(a.href,t)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,t))return r.push(a),!0;return!1}(e.items),r.reverse()}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function y(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`DocNavbarItem: couldn't find any doc with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:u}}},2489:(e,t,n)=>{"use strict";function r(e){return"title"in e[0]}n.d(t,{a:()=>r})},2128:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(2263);function a(e){const{siteConfig:t}=(0,r.default)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},833:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2128);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=(0,u.p)(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.default)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.default)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,LI:()=>a,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8022:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.default)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,o.default)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(143),a=n(2263),o=n(373);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,a.default)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,o.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=s[e],o=t[e].versions.find((e=>e.isLast));return l(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:u}}},12:(e,t,n)=>{"use strict";n.d(t,{W:()=>l,_:()=>s});const r="localStorage";function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,o||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),o=!0),null}var t}let o=!1;const i={get:()=>null,set:()=>{},del:()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t}}(e);const n=a(t?.persistence);return null===n?i:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{n.setItem(e,t)}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{n.removeItem(e)}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}}}}function s(e){void 0===e&&(e=r);const t=a(e);if(!t)return[];const n=[];for(let r=0;r{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.default)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.default)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta,default:()=>o});const o=a},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>P,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,o){for(var i,l,s=a(e),u=1;u{"use strict";n.r(t),n.d(t,{default:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=k.value.length,k=k.next){var x=k.value;if(t.length>e.length)return;if(!(x instanceof a)){var _,C=1;if(v){if(!(_=o(E,S,e,b))||_.index>=e.length)break;var T=_.index,P=_.index+_[0].length,A=S;for(A+=k.value.length;T>=A;)A+=(k=k.next).value.length;if(S=A-=k.value.length,k.value instanceof a)continue;for(var L=k;L!==t.tail&&(Ad.reach&&(d.reach=N);var I=k.prev;if(O&&(I=s(t,I,O),S+=O.length),u(t,I,C),k=s(t,I,new a(f,h?r.tokenize(R,h):R,y,R)),z&&s(t,k,z),C>1){var M={cause:f+","+m,reach:N};i(e,t,n,k.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},5520:()=>{!function(e){function t(e){return RegExp(/(\()/.source+"(?:"+e+")"+/(?=[\s\)])/.source)}function n(e){return RegExp(/([\s([])/.source+"(?:"+e+")"+/(?=[\s)])/.source)}var r=/(?!\d)[-+*/~!@$%^=<>{}\w]+/.source,a="&"+r,o="(\\()",i="(?=\\s)",l=/(?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\))*\))*\))*/.source,s={heading:{pattern:/;;;.*/,alias:["comment","title"]},comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\s])/,symbol:RegExp("`"+r+"'")}},"quoted-symbol":{pattern:RegExp("#?'"+r),alias:["variable","symbol"]},"lisp-property":{pattern:RegExp(":"+r),alias:"property"},splice:{pattern:RegExp(",@?"+r),alias:["symbol","variable"]},keyword:[{pattern:RegExp(o+"(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)"+i),lookbehind:!0},{pattern:RegExp(o+"(?:append|by|collect|concat|do|finally|for|in|return)"+i),lookbehind:!0}],declare:{pattern:t(/declare/.source),lookbehind:!0,alias:"keyword"},interactive:{pattern:t(/interactive/.source),lookbehind:!0,alias:"keyword"},boolean:{pattern:n(/nil|t/.source),lookbehind:!0},number:{pattern:n(/[-+]?\d+(?:\.\d*)?/.source),lookbehind:!0},defvar:{pattern:RegExp(o+"def(?:const|custom|group|var)\\s+"+r),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(r)}},defun:{pattern:RegExp(o+/(?:cl-)?(?:defmacro|defun\*?)\s+/.source+r+/\s+\(/.source+l+/\)/.source),lookbehind:!0,greedy:!0,inside:{keyword:/^(?:cl-)?def\S+/,arguments:null,function:{pattern:RegExp("(^\\s)"+r),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp(o+"lambda\\s+\\(\\s*(?:&?"+r+"(?:\\s+&?"+r+")*\\s*)?\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(o+r),lookbehind:!0},punctuation:[/(?:['`,]?\(|[)\[\]])/,{pattern:/(\s)\.(?=\s)/,lookbehind:!0}]},u={"lisp-marker":RegExp(a),varform:{pattern:RegExp(/\(/.source+r+/\s+(?=\S)/.source+l+/\)/.source),inside:s},argument:{pattern:RegExp(/(^|[\s(])/.source+r),lookbehind:!0,alias:"variable"},rest:s},c="\\S+(?:\\s+\\S+)*",d={pattern:RegExp(o+l+"(?=\\))"),lookbehind:!0,inside:{"rest-vars":{pattern:RegExp("&(?:body|rest)\\s+"+c),inside:u},"other-marker-vars":{pattern:RegExp("&(?:aux|optional)\\s+"+c),inside:u},keys:{pattern:RegExp("&key\\s+"+c+"(?:\\s+&allow-other-keys)?"),inside:u},argument:{pattern:RegExp(r),alias:"variable"},punctuation:/[()]/}};s.lambda.inside.arguments=d,s.defun.inside.arguments=e.util.clone(d),s.defun.inside.arguments.inside.sublist=d,e.languages.lisp=s,e.languages.elisp=s,e.languages.emacs=s,e.languages["emacs-lisp"]=s}(Prism)},4961:(e,t,n)=>{var r={"./prism-lisp":5520};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=4961},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n