diff --git a/docs/make.jl b/docs/make.jl index 2559c7e..ae55a7c 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -16,17 +16,23 @@ modules = [Satisfiability], pages = [ "index.md", "installation.md", + "Tutorial" => [ "tutorial.md", + "interactive.md", + "example_uninterpreted_func.md", + "advanced.md", + ], "faq.md", "Examples" => [ "example_scheduling.md", "example_job_shop.md", "example_bv_lcg.md", + "example_graph_coloring.md", + "example_bad_assertions.md", ], "Library" => [ "functions.md" - ], - "advanced.md", + ] ], format=fmt, ) diff --git a/docs/server.sh b/docs/server.sh new file mode 100755 index 0000000..4d3d633 --- /dev/null +++ b/docs/server.sh @@ -0,0 +1 @@ +python3 -m http.server --bind localhost diff --git a/docs/src/advanced.md b/docs/src/advanced.md index ba022b2..24b5de3 100644 --- a/docs/src/advanced.md +++ b/docs/src/advanced.md @@ -14,47 +14,55 @@ solver = Solver("My Solver", `program_name --option1 --option2`) sat!(problem, solver) # sat! will use your provided command to invoke the solver ``` -The command you provide must launch a solver that accepts SMTLIB2-formatted commands and can respond to `(get-model)` in SAT mode. (An example of a command that does NOT work is `cvc5 --interactive`, because `cvc5` cannot answer `(get-model)` without the `--produce-models` option.) +The command you provide must launch a solver that accepts SMTLIB2-formatted commands and can respond to `(get-model)` in SAT mode. (An example of a command that does NOT work is `cvc5 --interactive`, because `CVC5` cannot answer `(get-model)` without the `--produce-models` option.) -To familiarize yourself with what this means, you may use `save` to generate a small SMT file for a satisfiable problem, then [call a solver from the terminal](installation.md#installing-a-solver), paste in the contents of your SMT file, and issue the command `(get-model)`. This is exactly what BooleanSatisfiability.jl does when you call `sat!`. Armed with this knowledge, go forth and customize your solver command. +To familiarize yourself with what this means, you may use `save` to generate a small SMT file for a satisfiable problem, then [call a solver from the terminal](installation.md#installing-a-solver), paste in the contents of your SMT file, and issue the command `(get-model)`. This is exactly what Satisfiability.jl does when you call `sat!`. Armed with this knowledge, go forth and customize your solver command. -### Custom interactions with solvers -BooleanSatisfiability provides an interface to issue SMT2 commands and receive SMT2-formatted solver responses programmatically. This is useful if you wish to build your own decision logic or parser using advanced solver functionality. +### Custom interactions using `send_command` +Satisfiability.jl provides an interface to issue SMT-LIB commands and receive SMT-LIB-formatted solver responses programmatically. This is useful if you wish to build your own decision logic or parser using advanced solver functionality. -!!! note SMT2 solver modes. -In the SMT2 specification, after entering a problem and issuing the command `(check-sat)` the solver will be in either `sat` or `unsat` mode. The solver mode determines which commands are valid: for example, `(get-unsat-core)` is only valid in `unsat` mode and `(get-model)` is only valid in `sat` mode. You can find descriptions of modes and listings of valid commands in the latest [SMT-LIB Standard](http://www.smtlib.org/). +If you just want to use an SMT solver interactively, for example by `push`ing or `pop`ping assertions, check out [Interactive Solving](interactive.md). + +!!! note SMT-LIB solver modes. +In the SMT-LIB specification, after entering a problem and issuing the command `(check-sat)` the solver will be in either `sat` or `unsat` mode. The solver mode determines which commands are valid: for example, `(get-unsat-core)` is only valid in `unsat` mode and `(get-model)` is only valid in `sat` mode. You can find descriptions of modes and listings of valid commands in the latest [SMT-LIB Standard](http://www.smtlib.org/). Here's an example. ```julia @satvariable(x[1:2], Bool) expr = (x[1] ∧ ¬x[1]) ∧ any(x) # unsat -solver = Z3() -proc, pstdin, pstdout, pstderr = open_process(solver) +interactive_solver = open(Z3()) + +send_command(interactive_solver, "(set-option :produce-unsat-cores true)", dont_wait=true) # smt() adds the command (check-sat), so Z3 will be in either `sat` or `unsat` mode after this command. -input = smt(expr) -response = send_command(pstdin, pstdout, input, is_done=nested_parens_match) +input = smt(expr)*"\n(check-sat)\n" +response = send_command(interactive_solver, input, is_done=is_sat_or_unsat) -println("status = $response") # :UNSAT +println("status = $response") # "unsat" -response = send_command(pstdin, pstdout, "(get-unsat-core)", is_done=nested_parens_match) +response = send_command(interactive_solver, "(get-unsat-core)", is_done=nested_parens_match) println(response) # more interactions via `send_command`... -# it's good form to clean up your process -close(proc) +# it's good form to clean up your open solver process +close(interactive_solver) ``` -When using this functionality, you are responsible for keeping track of the solver mode and parsing the result of `send_command`. +When using this functionality, you are responsible for keeping track of the solver mode and parsing the result of `send_command`. For convenience, `parse_model(model::String)` can parse the result of the SMT-LIB command `(get-model)`, returning a dictionary with variable names as keys and satisfying assignments as values. + **Checking if the response is complete** +Receiving a complete solver response is not as simple as it sounds, for two reasons. +1. The solver may take a long time to respond, for example when calling `(check-sat)`. +2. The solver's response may be large, thus it may be received in several chunks. -The `send_command` function has an optional argument `is_done` for checking whether the full response has been received. The default is `nested_parens_match(output::String)` which returns `true` if `response` contains at least 1 matching pair of parentheses. This ensures the entire output is returned when issuing commands such as `(get-model)` where the response is wrapped in at least 1 set of parentheses. +The `send_command` function has an optional argument `is_done` for checking whether the full response has been received. Two convenience functions are provided: `nested_parens_match(response::String)` returns `true` if `response` begins with `(` and ends with a matching `)`. This ensures the entire output is returned when issuing commands such as `(get-model)` where the entire response is wrapped in 1 set of parentheses. Many solver responses follow this format. +`is_sat_or_unsat` is very simple: if the response contains `sat` or `unsat` it returns `true`, otherwise it's `false`. !!! warning Multiple parenthesized statements -If your command produces a response with multiple separate statements, for example `(statement_1)\n(statement_2)`, `nested_parens_match` is not guaranteed to return the entire response. The intended use case is `((statement_1)\n(statement_2))`. +If your command produces a response with multiple separate statements, for example `(statement_1)\n(statement_2)`, `nested_parens_match` is not guaranteed to return the entire response. The intended use case is `((statement_1)\n(statement_2))`. This should only happen if you issue two SMT-LIB commands at once. **Customizing `is_done`** @@ -64,4 +72,4 @@ A custom function `is_done(response::String)::Bool`, should have the following b SAT solvers can be slow and some commands produce long outputs. Without `is_done`, `send_command` could receive a partial response and prematurely return. -For full implementation details, please see the [source code](https://github.com/elsoroka/BooleanSatisfiability.jl/blob/main/src/call_solver.jl) of `call_solver.jl`. \ No newline at end of file +For full implementation details, please see the [source code](https://github.com/elsoroka/Satisfiability.jl/blob/main/src/call_solver.jl) of `call_solver.jl`. \ No newline at end of file diff --git a/docs/src/example_bad_assertions.md b/docs/src/example_bad_assertions.md new file mode 100644 index 0000000..b9e6fbb --- /dev/null +++ b/docs/src/example_bad_assertions.md @@ -0,0 +1,72 @@ +# Pushing and popping assertions +In this problem we have some expressions we need to satisfy, and some that we would like to satisfy (but we can't satisfy them all). +We want to figure out which expressions we can satisfy using push() and pop() to assert and remove them as necessary. + +```julia +using Satisfiability +@satvariable(x, Bool) +@satvariable(y, Bool) +@satvariable(z, Bool) +necessary_exprs = or(and(not(x), y, z), and(not(y), x, z)) + +interactive_solver = open(Z3()) +``` +We assert this at the first level, since we always have to have it. +```julia +assert!(interactive_solver, necessary_exprs) +``` + +Here are some conflicting expressions. One of them is satisfiable when `necessary_exprs` is true; the others are not. +```julia +conflicting_exprs = [ + not(z), + and(not(x), not(y)), + not(x), + and(x,y), +] +``` + +We'll use `push` and `pop` to add and remove them one at a time. +```julia +for e in conflicting_exprs + # Push one assertion level on the stack + push!(interactive_solver, 1) + + # Now assert an expression that might make the problem unsatisfiable + assert!(interactive_solver, e) + status, assignment = sat!(interactive_solver) + + if status == :SAT + println("We found it! Expr \n$e \nis satisfiable.") + assign!(necessary_exprs, assignment) + assign!(conflicting_exprs, assignment) + else + # Pop one level off the stack, removing the problematic assertion. + pop!(interactive_solver, 1) + end +end +``` + +### Another way to do this. +Let's reset the solver so we can try another way to do the same thing. This command clears all assertions, including the first one we made at level 1. +```julia +reset_assertions!(interactive_solver) +``` + +This time, we use `sat!(solver, exprs...)` which is equivalent to the SMT-LIB command `(check-sat-assuming exprs...)`. Thus the expression is not asserted but is assumed within the scope of the `sat!` call. +```julia +assert!(interactive_solver, necessary_exprs) +# Here's an equivalent way to do this by passing exprs into sat!. This is equivalent to the SMT-LIB syntax "(check-sat-assuming (exprs...))", which does not (assert) the expressions but assumes they should be satisfied. +for e in conflicting_exprs + status, assignment = sat!(interactive_solver, e) + println("status = $status") + if status == :SAT + println("We found it! Expr \n$e \nis satisfiable.") + assign!(necessary_exprs, assignment) + assign!(conflicting_exprs, assignment) + end +end + +# We're done, so don't forget to clean up. +close(interactive_solver) +``` \ No newline at end of file diff --git a/docs/src/example_bv_lcg.md b/docs/src/example_bv_lcg.md index a7f3cd8..2d0651c 100644 --- a/docs/src/example_bv_lcg.md +++ b/docs/src/example_bv_lcg.md @@ -35,7 +35,7 @@ remainders = BoolExpr[ ``` ```@example expr = and(all(transitions), all(remainders)) -status = sat!(expr, solver=cvc5()) +status = sat!(expr, solver=CVC5()) println("status = $status") for (i,state) in enumerate(states) diff --git a/docs/src/example_graph_coloring.md b/docs/src/example_graph_coloring.md new file mode 100644 index 0000000..86d7cc5 --- /dev/null +++ b/docs/src/example_graph_coloring.md @@ -0,0 +1,56 @@ +# Graph coloring +A classic problem in graph theory is figuring out how to color nodes of a graph such that no two adjacent nodes have the same color. +This is useful for things like mapmaking (imagine if your map had two adjacent countries sharing a color!) +The [chromatic polynomial](https://en.wikipedia.org/wiki/Graph_coloring) counts the number of ways a graph can be colored using n colors. For example, this graph +``` + (a) + | \ + | (c)--(d) + | / + (b) +``` +can be colored using exactly 3 colors in 12 different ways. Let's use SMT to find all 12 ways to color this graph. + +```julia +using Satisfiability +@satvariable(nodes[1:4], Int) + +# "There are 3 colors available" +limits = and.(nodes .>= 1, nodes .<= 3) + +# "No adjacent nodes can share a color" +(a, b, c, d) = nodes +connections = and(a != b, a != c, b != c, c != d) + +# "All 3 colors must be used" +# (If you leave this out you can find 24 colorings. But 12 of them will use only 2 colors.) +all3 = and(or(nodes .== i) for i=1:3) +``` + +To find **all** the solutions, we have to exclude solutions as we find them. Suppose we find a satisfying assignment `[vars] = [values]`. Adding the negation `not(and(vars .== values))` to the list of assertions excludes that specific assignment from being found again. Remember: when excluding solutions, negate the whole expression. An easy mistake is `and(not(nodes .== value(nodes)))`, which excludes each node from taking on the particular value we just found (for example, saying "a cannot be 1", "b cannot be 2"...) instead of excluding the specific combination of all 4 values ("a cannot be 1 when b is 2,..."). + +```julia +function findall() + + solutions = [] + open(Z3()) do interactive_solver # the do syntax closes the solver + assert!(interactive_solver, limits, connections, all3) + i = 1 + status, assignment = sat!(interactive_solver) + while status == :SAT + # Try to solve the problem + push!(solutions, assignment) + println("i = $i, status = $status, assignment = $assignment") + assign!(nodes, assignment) + + # Use assert! to exclude the solution we just found. + assert!(interactive_solver, not(and(nodes .== value(nodes)))) + status, assignment = sat!(interactive_solver) + i += 1 + end + end + println("Found them all!") +end + +findall() +``` \ No newline at end of file diff --git a/docs/src/example_scheduling.md b/docs/src/example_scheduling.md index dadcb9c..9c1ab67 100644 --- a/docs/src/example_scheduling.md +++ b/docs/src/example_scheduling.md @@ -53,11 +53,11 @@ no_double_booking = all([M[j,t] ⟹ ¬or(M[conflicts[j],t]) for j=1:J, t=1:T]) All meetings must be scheduled. ```@example -require_one_time = all([or(M[j,:]) for j=1:J]) +require_one_time = and(or(M[j,:]) for j=1:J) ``` No attendee should have more than 2 consecutive hours of meetings. ```@example -time_limit = all([¬and(A[i,t:t+2]) for i=1:n, t=1:T-2]) +time_limit = and(¬and(A[i,t:t+2]) for i=1:n, t=1:T-2) ``` ### Solving the problem @@ -69,7 +69,8 @@ status = sat!(exprs, Z3()) println("status = $status") # for this example we know it's SAT times = ["9a", "10a", "11a", "12p", "1p", "2p", "3p", "4p"] for j=1:J - println("Meeting with attendees $(index_sets[j]) can occur at $(times[findall(value(M[j,:]) .== true)])") + Mj_value = value(M[j,:]) + println("Meeting with attendees $(index_sets[j]) can occur at $(times[filter((i) -> Mj_value[i], 1:length(Mj_value))]) .== true)])") end println("Value A: $(value(A))") diff --git a/docs/src/example_uninterpreted_func.md b/docs/src/example_uninterpreted_func.md new file mode 100644 index 0000000..e26a77a --- /dev/null +++ b/docs/src/example_uninterpreted_func.md @@ -0,0 +1,37 @@ +# Uninterpreted Functions + + +An uninterpreted function is a function where the mapping between input and output is not known. The task of the SMT solver is then to determine a mapping such that some SMT expression holds true. + +Satisfiability.jl represents uninterpreted functions as callable structs. This enables the simple syntax: +```julia +@uninterpreted(myfunc, Int, Int) + +# we can call myfunc on an Int constant or variable +@satvariable(a, Int) +myfunc(a) +myfunc(-2) # returns + +# we cannot call myfunc on the wrong type +# myfunc(true) yields an error +# myfunc(1.5) yields an error +``` + +As a small example, we can ask whether there exists a function `f(x)` such that `f(f(x)) == x`, `f(x) == y` and `x != y`. + +```julia +@satvariable(x, Bool) +@satvariable(y, Bool) +@uninterpreted(f, Bool, Bool) + +status = sat!(distinct(x,y), f(x) == y, f(f(x)) == x, solver=Z3()) +println("status = \$status") +``` + +It turns out there is. Since the satisfying assignment for an uninterpreted function is itself a function, Satisfiability.jl represents this by setting the value of `f` to this function. Now calling `f(value)` will return the value of this satisfying assignment. + +```julia +println(f(x.value)) # prints 0 +println(f(x.value) == y.value) # true +println(f(f(x.value)) == x.value) # true +``` \ No newline at end of file diff --git a/docs/src/faq.md b/docs/src/faq.md index 73839fc..1f51a2c 100644 --- a/docs/src/faq.md +++ b/docs/src/faq.md @@ -20,7 +20,7 @@ If you have a problem with only discrete variables, especially a large one, you * Similarly, Java has [JavaSMT](https://github.com/sosy-lab/java-smt). -* CVC5 has [APIs](https://cvc5.github.io/docs/cvc5-1.0.2/api/api.html) for C++, Java, and Python. +* Solver-specific APIs include [CVC5 APIs](https://cvc5.github.io/docs/cvc5-1.0.2/api/api.html) for C++, Java, and Python. * Z3 has [APIs](https://z3prover.github.io/api/html/index.html) for C, C++, .NET, Java, Python, and ML/OCaml. Additionally, Microsoft Research provides [tutorials](https://microsoft.github.io/z3guide/programming/Z3%20JavaScript%20Examples) for using Z3 in Python and JavaScript. @@ -52,19 +52,3 @@ We provide a high-level interface to SMT solvers. SMT solvers can accept input i ## Why is `sat!` so slow for real-valued variables? Because the SMT theory of real-valued variables is incomplete. -## Where do all the long, ugly names in the SMT file come from? -To prevent names from being duplicated, Satisfiability.jl names new expressions using the Julia `hash` of their child expressions. - -For example, suppose you have -```@example -@satvariable(a, Int) -@satvariable(b, Int) -expr = a <= b -print(smt(expr)) -``` -The (long, ugly) name of the combined expression `a <= b` is generated by hashing the names `a` and `b`. - -**Q:** Why don't you just concatenate `a` and `b` and call it `LEQ_a_b`? - -**A:** Because what if we have `a = Int(10,"a"); expr = sum(a)`? Then `expr.name = ADD_a_1_a_2_a_3_a_4_a_5_a_6_a_7_a_8_a_9_a_10`. Or we could call it `ADD_a_1__a_10`, but what if then we defined `expr2 = a[1] + a[3:8] + a[10]`? It's easier to hash the names. - diff --git a/docs/src/functions.md b/docs/src/functions.md index ce4fdbd..a1d9d41 100644 --- a/docs/src/functions.md +++ b/docs/src/functions.md @@ -3,13 +3,16 @@ Pages = ["functions.md"] Depth = 3 ``` -Test link [link](#Logical-Operations) ## Defining variables Use the `@satvariable` macro to define a variable. ```@docs @satvariable ``` +An **uninterpreted function** is a function where the mapping between input and output is not known. The task of the SMT solver is then to determine a mapping such that some SMT expression holds true. +```@docs +@uninterpreted +``` ## Logical operations @@ -24,6 +27,8 @@ implies(z1::BoolExpr, z2::BoolExpr) iff(z1::BoolExpr, z2::BoolExpr) ite(x::Union{BoolExpr, Bool}, y::Union{BoolExpr, Bool}, z::Union{BoolExpr, Bool}) +distinct(z1::BoolExpr, z2::BoolExpr) + all(zs::Array{T}) where T <: BoolExpr any(zs::Array{T}) where T <: BoolExpr ``` @@ -121,7 +126,7 @@ sge(a::BitVectorExpr{UInt8}, b::BitVectorExpr{UInt8}) ```@docs smt(zs::Array{T}) where T <: BoolExpr -save(prob::BoolExpr; filename="out") +save(prob::BoolExpr, io::IO) ``` ## Solving a SAT problem @@ -130,14 +135,24 @@ sat!(prob::BoolExpr, solver::Solver) value(zs::Array{T}) where T <: AbstractExpr ``` -### Custom interactions with solvers: +### Interacting with solvers ```@docs -open_solver(solver::Solver) -send_command(pstdin::Pipe, pstdout::Pipe, cmd::String) +open(solver::Solver) +close(solver::InteractiveSolver) +push!(solver::InteractiveSolver, n::Integer) +pop!(solver::InteractiveSolver, n::Integer) +assert!(solver::InteractiveSolver, exprs::BoolExpr) +sat!(solver::InteractiveSolver, exprs::BoolExpr) +send_command(solver::InteractiveSolver, cmd::String) nested_parens_match(solver_output::String) +is_sat_or_unsat(solver_output::String) +parse_model(model::String) +assign!(e::AbstractExpr, d::Dict) +reset!(s::InteractiveSolver) +reset_assertions!(s::InteractiveSolver) ``` ## Miscellaneous functions ```@docs -Base.isequal(a::AbstractExpr, b::AbstractExpr) +isequal(a::AbstractExpr, b::AbstractExpr) ``` \ No newline at end of file diff --git a/docs/src/installation.md b/docs/src/installation.md index 74242cc..bab76d7 100644 --- a/docs/src/installation.md +++ b/docs/src/installation.md @@ -18,21 +18,21 @@ Satisfiability uses Julia's Base.Process library to interact with solvers. Thus **To install Z3**, use `sudo apt-get install z3`. If you can launch Z3 from the command line by typing `z3 -smt2 -in`, your installation is correct. -**To install cvc5:** +**To install CVC5:** * Download the appropriate binary [here](https://cvc5.github.io/downloads.html) and save it as `cvc5`. (Note: if you already have `cvc5` installed under the name `cvc5-linux`, make a symlink to the name `cvc5` or [customize your solver command](advanced.md#Custom-solver-options-and-using-other-solvers) to use the name `cvc5-linux`.) * Set the executable permission: `chmod +x ./cvc5`. * Most users should move the binary to `/usr/local/bin`. This allows it to be found from the command line. -If you can launch cvc5 from the command line by typing `cvc5 --interactive --produce-models`, your installation is correct. +If you can launch CVC5 from the command line by typing `cvc5 --interactive --produce-models`, your installation is correct. -### OS X +### MacOS **To install Z3** * Download the appropriate zip file for the [latest Z3 release](https://github.com/Z3Prover/z3/releases) and install following the instructions on that page. -* If you can open your Terminal and launch z3 by typing `z3.exe -smt2 -in`, your installation is correct. +* If you can open your Terminal and launch z3 by typing `z3 -smt2 -in`, your installation is correct. -**To install cvc5** +**To install CVC5** * Download the appropriate binary [here](https://cvc5.github.io/downloads.html) and save it as `cvc5`. (Note: if you already have `cvc5` installed under another name, make a symlink to the name `cvc5` or [customize your solver command](advanced.md#Custom-solver-options-and-using-other-solvers) to use the name you already have.) * Most users should move the binary to `/usr/local/bin`. This allows it to be found from the command line. -* If you can open your Terminal and launch cvc5 by typing `cvc5 --interactive --produce-models`, your installation is correct. +* If you can open your Terminal and launch CVC5 by typing `cvc5 --interactive --produce-models`, your installation is correct. ### Windows **To install Z3** diff --git a/docs/src/interactive.md b/docs/src/interactive.md new file mode 100644 index 0000000..0735ae9 --- /dev/null +++ b/docs/src/interactive.md @@ -0,0 +1,52 @@ +# Interactive solving +```@contents +Pages = ["interactive.md"] +Depth = 3 +``` + +The simplest way to solve an SMT problem is to call `sat!`. Under the hood, `sat!` translates your problem to the SMT-LIB format, spawns a solver in a new process, feeds in your problem and, if it's satisfiable, requests the satisfying assignment. + +However, many use cases require ongoing interaction with the SMT solver. Satisfiability.jl provides this functionality using the `InteractiveSolver` struct, allowing users to interface with a running solver process. A typical interactive workflow looks like this. + +**Construct some expressions** +```julia +using Satisfiability +@satvariable(x, Bool) +@satvariable(y, Bool) +@satvariable(z, Bool) +expr1 = or(and(not(x), y), and(not(y), x)) +expr2 = not(z) +``` + +**Spawn a solver process** +```julia +interactive_solver = open(Z3()) +``` +**Make some assertions.** +```julia +assert!(interactive_solver, expr1, expr2) +``` +**Check satisfiability.** +In interactive solver mode, you can provide more expressions to `sat!`; this would look like `sat!(interactive_solver, expr3, expr4...)`. +Since `sat!` only receives the solver object, it's not able to set the values of `expr1` and `expr2`. Instead, it will return a dictionary containing the satisfying assignment. You can then set your expressions' values using `assign!`. +```julia +status, assignment = sat!(interactive_solver) +if status == :SAT + assign!(expr1, assignment) + assign!(expr2, assignment) + println("Values of x, y, z: x=$(value(x)), y=$(value(y)), z=$(value(z)))") +end +``` +**Do other stuff, then close your process.** +```julia +close(interactive_solver) +``` + +The [Graph Coloring](example_graph_coloring.md) example uses interactivity to find **every** solution to a problem. + +## Managing the assertion stack +SMT-LIB implements the concept of an assertion stack. Pushing a level onto the stack allows you to assert statements, then pop that level off, erasing the assertions and declarations you made. +This is useful when incrementally adding constraints to a problem. [Finding Bad Assertions](example_bad_assertions.md) provides an example of using `push` and `pop` or `sat!(solver, exprs...)` to manage assertions. + +### How can I get more control over the solver? +If you need more granular control over solver commands and responses, check our guide on [advanced usage](advanced.md). For suggestions, feel free to open a GitHub issue! This is a new package and we'd like to hear user feedback. \ No newline at end of file diff --git a/examples/bv_lcg.jl b/examples/bv_lcg.jl index 1a652c1..4e29e16 100644 --- a/examples/bv_lcg.jl +++ b/examples/bv_lcg.jl @@ -33,7 +33,7 @@ remainders = BoolExpr[ ] expr = and(all(transitions), all(remainders)) -status = sat!(expr, solver=cvc5()) +status = sat!(expr, solver=CVC5()) println("status = $status") for (i,state) in enumerate(states) @@ -43,4 +43,4 @@ println("prev = $(value(output_prev))") println("next = $(value(output_next))") # According to Mr. Yurichev's example, the previous output is 37 and the next output is 17! -# This matches on my machine using Z3 and cvc5. +# This matches on my machine using Z3 and CVC5. diff --git a/examples/interactive_example.jl b/examples/interactive_example.jl new file mode 100644 index 0000000..8c66289 --- /dev/null +++ b/examples/interactive_example.jl @@ -0,0 +1,25 @@ +push!(LOAD_PATH, "../src") +using Satisfiability + +@satvariable(x, Bool) +@satvariable(y, Bool) +@satvariable(z, Bool) +expr1 = or(and(not(x), y), and(not(y), x)) +expr2 = not(z) + +# Spawn a solver process +interactive_solver = open(Z3()) + +# Make some assertions. +assert!(interactive_solver, expr1, expr2) + +# Check satisfiability +status, assignment = sat!(interactive_solver) +if status == :SAT + assign!(expr1, assignment) + assign!(expr2, assignment) + println("Values of x, y, z: x=$(value(x)), y=$(value(y)), z=$(value(z)))") +end + +# Close your process +close(interactive_solver) \ No newline at end of file diff --git a/examples/interactive_graph_coloring.jl b/examples/interactive_graph_coloring.jl new file mode 100644 index 0000000..a9ce5e2 --- /dev/null +++ b/examples/interactive_graph_coloring.jl @@ -0,0 +1,53 @@ +push!(LOAD_PATH, "../src") +using Satisfiability + +# A classic problem in graph theory is figuring out how to color nodes of a graph such that no two adjacent nodes have the same color. +# This is useful for things like mapmaking (imagine if your map had two adjacent countries sharing a color!) +# The chromatic polynomial (https://en.wikipedia.org/wiki/Graph_coloring) counts the number of ways a graph can be colored using n colors. +# For example, this graph +#= + (a) + | \ + | (c)--(d) + | / + (b) +=# +# can be colored using exactly 3 colors in 12 different ways. +# Let's use SMT to find all 12 ways to color this graph. + +@satvariable(nodes[1:4], Int) + +# "There are 3 colors available" +limits = and.(nodes .>= 1, nodes .<= 3) + +# "No adjacent nodes can share a color" +(a, b, c, d) = nodes +connections = and(a != b, a != c, b != c, c != d) + +# "All 3 colors must be used" +# (If you leave this out you can find 24 colorings. But 12 of them will use only 2 colors.) +all3 = and(or(nodes .== i) for i=1:3) + +function findall() + + solutions = [] + open(Z3()) do interactive_solver # the do syntax closes the solver + assert!(interactive_solver, limits, connections, all3) + i = 1 + status, assignment = sat!(interactive_solver) + while status == :SAT + # Try to solve the problem + push!(solutions, assignment) + println("i = $i, status = $status, assignment = $assignment") + assign!(nodes, assignment) + + # Use assert! to exclude the solution we just found. + assert!(interactive_solver, not(and(nodes .== value(nodes)))) + status, assignment = sat!(interactive_solver) + i += 1 + end + end + println("Found them all!") +end + +findall() diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-10.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-10.smt2 new file mode 100644 index 0000000..7c712d7 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-10.smt2 @@ -0,0 +1,357 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-11.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-11.smt2 new file mode 100644 index 0000000..db8a37b --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-11.smt2 @@ -0,0 +1,425 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-12.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-12.smt2 new file mode 100644 index 0000000..a765b21 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-12.smt2 @@ -0,0 +1,499 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_0_11 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_1_11 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_2_11 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_3_11 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_4_11 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_5_11 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_6_11 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_7_11 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_8_11 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_9_11 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_10_11 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(declare-fun p_11_11 () Int) +(declare-fun p_12_0 () Int) +(declare-fun p_12_1 () Int) +(declare-fun p_12_2 () Int) +(declare-fun p_12_3 () Int) +(declare-fun p_12_4 () Int) +(declare-fun p_12_5 () Int) +(declare-fun p_12_6 () Int) +(declare-fun p_12_7 () Int) +(declare-fun p_12_8 () Int) +(declare-fun p_12_9 () Int) +(declare-fun p_12_10 () Int) +(declare-fun p_12_11 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_0_11 0)) +(assert (<= p_0_11 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_1_11 0)) +(assert (<= p_1_11 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_2_11 0)) +(assert (<= p_2_11 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_3_11 0)) +(assert (<= p_3_11 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_4_11 0)) +(assert (<= p_4_11 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_5_11 0)) +(assert (<= p_5_11 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_6_11 0)) +(assert (<= p_6_11 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_7_11 0)) +(assert (<= p_7_11 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_8_11 0)) +(assert (<= p_8_11 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_9_11 0)) +(assert (<= p_9_11 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_10_11 0)) +(assert (<= p_10_11 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= p_11_11 0)) +(assert (<= p_11_11 1)) +(assert (>= p_12_0 0)) +(assert (<= p_12_0 1)) +(assert (>= p_12_1 0)) +(assert (<= p_12_1 1)) +(assert (>= p_12_2 0)) +(assert (<= p_12_2 1)) +(assert (>= p_12_3 0)) +(assert (<= p_12_3 1)) +(assert (>= p_12_4 0)) +(assert (<= p_12_4 1)) +(assert (>= p_12_5 0)) +(assert (<= p_12_5 1)) +(assert (>= p_12_6 0)) +(assert (<= p_12_6 1)) +(assert (>= p_12_7 0)) +(assert (<= p_12_7 1)) +(assert (>= p_12_8 0)) +(assert (<= p_12_8 1)) +(assert (>= p_12_9 0)) +(assert (<= p_12_9 1)) +(assert (>= p_12_10 0)) +(assert (<= p_12_10 1)) +(assert (>= p_12_11 0)) +(assert (<= p_12_11 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10 p_0_11) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10 p_1_11) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10 p_2_11) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10 p_3_11) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10 p_4_11) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10 p_5_11) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10 p_6_11) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10 p_7_11) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10 p_8_11) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10 p_9_11) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10 p_10_11) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10 p_11_11) 1)) +(assert (>= (+ p_12_0 p_12_1 p_12_2 p_12_3 p_12_4 p_12_5 p_12_6 p_12_7 p_12_8 p_12_9 p_12_10 p_12_11) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0 p_12_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1 p_12_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2 p_12_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3 p_12_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4 p_12_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5 p_12_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6 p_12_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7 p_12_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8 p_12_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9 p_12_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10 p_12_10) 1)) +(assert (<= (+ p_0_11 p_1_11 p_2_11 p_3_11 p_4_11 p_5_11 p_6_11 p_7_11 p_8_11 p_9_11 p_10_11 p_11_11 p_12_11) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-13.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-13.smt2 new file mode 100644 index 0000000..aa334c5 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-13.smt2 @@ -0,0 +1,579 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_0_11 () Int) +(declare-fun p_0_12 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_1_11 () Int) +(declare-fun p_1_12 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_2_11 () Int) +(declare-fun p_2_12 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_3_11 () Int) +(declare-fun p_3_12 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_4_11 () Int) +(declare-fun p_4_12 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_5_11 () Int) +(declare-fun p_5_12 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_6_11 () Int) +(declare-fun p_6_12 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_7_11 () Int) +(declare-fun p_7_12 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_8_11 () Int) +(declare-fun p_8_12 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_9_11 () Int) +(declare-fun p_9_12 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_10_11 () Int) +(declare-fun p_10_12 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(declare-fun p_11_11 () Int) +(declare-fun p_11_12 () Int) +(declare-fun p_12_0 () Int) +(declare-fun p_12_1 () Int) +(declare-fun p_12_2 () Int) +(declare-fun p_12_3 () Int) +(declare-fun p_12_4 () Int) +(declare-fun p_12_5 () Int) +(declare-fun p_12_6 () Int) +(declare-fun p_12_7 () Int) +(declare-fun p_12_8 () Int) +(declare-fun p_12_9 () Int) +(declare-fun p_12_10 () Int) +(declare-fun p_12_11 () Int) +(declare-fun p_12_12 () Int) +(declare-fun p_13_0 () Int) +(declare-fun p_13_1 () Int) +(declare-fun p_13_2 () Int) +(declare-fun p_13_3 () Int) +(declare-fun p_13_4 () Int) +(declare-fun p_13_5 () Int) +(declare-fun p_13_6 () Int) +(declare-fun p_13_7 () Int) +(declare-fun p_13_8 () Int) +(declare-fun p_13_9 () Int) +(declare-fun p_13_10 () Int) +(declare-fun p_13_11 () Int) +(declare-fun p_13_12 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_0_11 0)) +(assert (<= p_0_11 1)) +(assert (>= p_0_12 0)) +(assert (<= p_0_12 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_1_11 0)) +(assert (<= p_1_11 1)) +(assert (>= p_1_12 0)) +(assert (<= p_1_12 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_2_11 0)) +(assert (<= p_2_11 1)) +(assert (>= p_2_12 0)) +(assert (<= p_2_12 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_3_11 0)) +(assert (<= p_3_11 1)) +(assert (>= p_3_12 0)) +(assert (<= p_3_12 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_4_11 0)) +(assert (<= p_4_11 1)) +(assert (>= p_4_12 0)) +(assert (<= p_4_12 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_5_11 0)) +(assert (<= p_5_11 1)) +(assert (>= p_5_12 0)) +(assert (<= p_5_12 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_6_11 0)) +(assert (<= p_6_11 1)) +(assert (>= p_6_12 0)) +(assert (<= p_6_12 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_7_11 0)) +(assert (<= p_7_11 1)) +(assert (>= p_7_12 0)) +(assert (<= p_7_12 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_8_11 0)) +(assert (<= p_8_11 1)) +(assert (>= p_8_12 0)) +(assert (<= p_8_12 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_9_11 0)) +(assert (<= p_9_11 1)) +(assert (>= p_9_12 0)) +(assert (<= p_9_12 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_10_11 0)) +(assert (<= p_10_11 1)) +(assert (>= p_10_12 0)) +(assert (<= p_10_12 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= p_11_11 0)) +(assert (<= p_11_11 1)) +(assert (>= p_11_12 0)) +(assert (<= p_11_12 1)) +(assert (>= p_12_0 0)) +(assert (<= p_12_0 1)) +(assert (>= p_12_1 0)) +(assert (<= p_12_1 1)) +(assert (>= p_12_2 0)) +(assert (<= p_12_2 1)) +(assert (>= p_12_3 0)) +(assert (<= p_12_3 1)) +(assert (>= p_12_4 0)) +(assert (<= p_12_4 1)) +(assert (>= p_12_5 0)) +(assert (<= p_12_5 1)) +(assert (>= p_12_6 0)) +(assert (<= p_12_6 1)) +(assert (>= p_12_7 0)) +(assert (<= p_12_7 1)) +(assert (>= p_12_8 0)) +(assert (<= p_12_8 1)) +(assert (>= p_12_9 0)) +(assert (<= p_12_9 1)) +(assert (>= p_12_10 0)) +(assert (<= p_12_10 1)) +(assert (>= p_12_11 0)) +(assert (<= p_12_11 1)) +(assert (>= p_12_12 0)) +(assert (<= p_12_12 1)) +(assert (>= p_13_0 0)) +(assert (<= p_13_0 1)) +(assert (>= p_13_1 0)) +(assert (<= p_13_1 1)) +(assert (>= p_13_2 0)) +(assert (<= p_13_2 1)) +(assert (>= p_13_3 0)) +(assert (<= p_13_3 1)) +(assert (>= p_13_4 0)) +(assert (<= p_13_4 1)) +(assert (>= p_13_5 0)) +(assert (<= p_13_5 1)) +(assert (>= p_13_6 0)) +(assert (<= p_13_6 1)) +(assert (>= p_13_7 0)) +(assert (<= p_13_7 1)) +(assert (>= p_13_8 0)) +(assert (<= p_13_8 1)) +(assert (>= p_13_9 0)) +(assert (<= p_13_9 1)) +(assert (>= p_13_10 0)) +(assert (<= p_13_10 1)) +(assert (>= p_13_11 0)) +(assert (<= p_13_11 1)) +(assert (>= p_13_12 0)) +(assert (<= p_13_12 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10 p_0_11 p_0_12) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10 p_1_11 p_1_12) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10 p_2_11 p_2_12) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10 p_3_11 p_3_12) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10 p_4_11 p_4_12) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10 p_5_11 p_5_12) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10 p_6_11 p_6_12) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10 p_7_11 p_7_12) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10 p_8_11 p_8_12) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10 p_9_11 p_9_12) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10 p_10_11 p_10_12) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10 p_11_11 p_11_12) 1)) +(assert (>= (+ p_12_0 p_12_1 p_12_2 p_12_3 p_12_4 p_12_5 p_12_6 p_12_7 p_12_8 p_12_9 p_12_10 p_12_11 p_12_12) 1)) +(assert (>= (+ p_13_0 p_13_1 p_13_2 p_13_3 p_13_4 p_13_5 p_13_6 p_13_7 p_13_8 p_13_9 p_13_10 p_13_11 p_13_12) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0 p_12_0 p_13_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1 p_12_1 p_13_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2 p_12_2 p_13_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3 p_12_3 p_13_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4 p_12_4 p_13_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5 p_12_5 p_13_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6 p_12_6 p_13_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7 p_12_7 p_13_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8 p_12_8 p_13_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9 p_12_9 p_13_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10 p_12_10 p_13_10) 1)) +(assert (<= (+ p_0_11 p_1_11 p_2_11 p_3_11 p_4_11 p_5_11 p_6_11 p_7_11 p_8_11 p_9_11 p_10_11 p_11_11 p_12_11 p_13_11) 1)) +(assert (<= (+ p_0_12 p_1_12 p_2_12 p_3_12 p_4_12 p_5_12 p_6_12 p_7_12 p_8_12 p_9_12 p_10_12 p_11_12 p_12_12 p_13_12) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-14.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-14.smt2 new file mode 100644 index 0000000..cbde055 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-14.smt2 @@ -0,0 +1,665 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_0_11 () Int) +(declare-fun p_0_12 () Int) +(declare-fun p_0_13 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_1_11 () Int) +(declare-fun p_1_12 () Int) +(declare-fun p_1_13 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_2_11 () Int) +(declare-fun p_2_12 () Int) +(declare-fun p_2_13 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_3_11 () Int) +(declare-fun p_3_12 () Int) +(declare-fun p_3_13 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_4_11 () Int) +(declare-fun p_4_12 () Int) +(declare-fun p_4_13 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_5_11 () Int) +(declare-fun p_5_12 () Int) +(declare-fun p_5_13 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_6_11 () Int) +(declare-fun p_6_12 () Int) +(declare-fun p_6_13 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_7_11 () Int) +(declare-fun p_7_12 () Int) +(declare-fun p_7_13 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_8_11 () Int) +(declare-fun p_8_12 () Int) +(declare-fun p_8_13 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_9_11 () Int) +(declare-fun p_9_12 () Int) +(declare-fun p_9_13 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_10_11 () Int) +(declare-fun p_10_12 () Int) +(declare-fun p_10_13 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(declare-fun p_11_11 () Int) +(declare-fun p_11_12 () Int) +(declare-fun p_11_13 () Int) +(declare-fun p_12_0 () Int) +(declare-fun p_12_1 () Int) +(declare-fun p_12_2 () Int) +(declare-fun p_12_3 () Int) +(declare-fun p_12_4 () Int) +(declare-fun p_12_5 () Int) +(declare-fun p_12_6 () Int) +(declare-fun p_12_7 () Int) +(declare-fun p_12_8 () Int) +(declare-fun p_12_9 () Int) +(declare-fun p_12_10 () Int) +(declare-fun p_12_11 () Int) +(declare-fun p_12_12 () Int) +(declare-fun p_12_13 () Int) +(declare-fun p_13_0 () Int) +(declare-fun p_13_1 () Int) +(declare-fun p_13_2 () Int) +(declare-fun p_13_3 () Int) +(declare-fun p_13_4 () Int) +(declare-fun p_13_5 () Int) +(declare-fun p_13_6 () Int) +(declare-fun p_13_7 () Int) +(declare-fun p_13_8 () Int) +(declare-fun p_13_9 () Int) +(declare-fun p_13_10 () Int) +(declare-fun p_13_11 () Int) +(declare-fun p_13_12 () Int) +(declare-fun p_13_13 () Int) +(declare-fun p_14_0 () Int) +(declare-fun p_14_1 () Int) +(declare-fun p_14_2 () Int) +(declare-fun p_14_3 () Int) +(declare-fun p_14_4 () Int) +(declare-fun p_14_5 () Int) +(declare-fun p_14_6 () Int) +(declare-fun p_14_7 () Int) +(declare-fun p_14_8 () Int) +(declare-fun p_14_9 () Int) +(declare-fun p_14_10 () Int) +(declare-fun p_14_11 () Int) +(declare-fun p_14_12 () Int) +(declare-fun p_14_13 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_0_11 0)) +(assert (<= p_0_11 1)) +(assert (>= p_0_12 0)) +(assert (<= p_0_12 1)) +(assert (>= p_0_13 0)) +(assert (<= p_0_13 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_1_11 0)) +(assert (<= p_1_11 1)) +(assert (>= p_1_12 0)) +(assert (<= p_1_12 1)) +(assert (>= p_1_13 0)) +(assert (<= p_1_13 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_2_11 0)) +(assert (<= p_2_11 1)) +(assert (>= p_2_12 0)) +(assert (<= p_2_12 1)) +(assert (>= p_2_13 0)) +(assert (<= p_2_13 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_3_11 0)) +(assert (<= p_3_11 1)) +(assert (>= p_3_12 0)) +(assert (<= p_3_12 1)) +(assert (>= p_3_13 0)) +(assert (<= p_3_13 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_4_11 0)) +(assert (<= p_4_11 1)) +(assert (>= p_4_12 0)) +(assert (<= p_4_12 1)) +(assert (>= p_4_13 0)) +(assert (<= p_4_13 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_5_11 0)) +(assert (<= p_5_11 1)) +(assert (>= p_5_12 0)) +(assert (<= p_5_12 1)) +(assert (>= p_5_13 0)) +(assert (<= p_5_13 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_6_11 0)) +(assert (<= p_6_11 1)) +(assert (>= p_6_12 0)) +(assert (<= p_6_12 1)) +(assert (>= p_6_13 0)) +(assert (<= p_6_13 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_7_11 0)) +(assert (<= p_7_11 1)) +(assert (>= p_7_12 0)) +(assert (<= p_7_12 1)) +(assert (>= p_7_13 0)) +(assert (<= p_7_13 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_8_11 0)) +(assert (<= p_8_11 1)) +(assert (>= p_8_12 0)) +(assert (<= p_8_12 1)) +(assert (>= p_8_13 0)) +(assert (<= p_8_13 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_9_11 0)) +(assert (<= p_9_11 1)) +(assert (>= p_9_12 0)) +(assert (<= p_9_12 1)) +(assert (>= p_9_13 0)) +(assert (<= p_9_13 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_10_11 0)) +(assert (<= p_10_11 1)) +(assert (>= p_10_12 0)) +(assert (<= p_10_12 1)) +(assert (>= p_10_13 0)) +(assert (<= p_10_13 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= p_11_11 0)) +(assert (<= p_11_11 1)) +(assert (>= p_11_12 0)) +(assert (<= p_11_12 1)) +(assert (>= p_11_13 0)) +(assert (<= p_11_13 1)) +(assert (>= p_12_0 0)) +(assert (<= p_12_0 1)) +(assert (>= p_12_1 0)) +(assert (<= p_12_1 1)) +(assert (>= p_12_2 0)) +(assert (<= p_12_2 1)) +(assert (>= p_12_3 0)) +(assert (<= p_12_3 1)) +(assert (>= p_12_4 0)) +(assert (<= p_12_4 1)) +(assert (>= p_12_5 0)) +(assert (<= p_12_5 1)) +(assert (>= p_12_6 0)) +(assert (<= p_12_6 1)) +(assert (>= p_12_7 0)) +(assert (<= p_12_7 1)) +(assert (>= p_12_8 0)) +(assert (<= p_12_8 1)) +(assert (>= p_12_9 0)) +(assert (<= p_12_9 1)) +(assert (>= p_12_10 0)) +(assert (<= p_12_10 1)) +(assert (>= p_12_11 0)) +(assert (<= p_12_11 1)) +(assert (>= p_12_12 0)) +(assert (<= p_12_12 1)) +(assert (>= p_12_13 0)) +(assert (<= p_12_13 1)) +(assert (>= p_13_0 0)) +(assert (<= p_13_0 1)) +(assert (>= p_13_1 0)) +(assert (<= p_13_1 1)) +(assert (>= p_13_2 0)) +(assert (<= p_13_2 1)) +(assert (>= p_13_3 0)) +(assert (<= p_13_3 1)) +(assert (>= p_13_4 0)) +(assert (<= p_13_4 1)) +(assert (>= p_13_5 0)) +(assert (<= p_13_5 1)) +(assert (>= p_13_6 0)) +(assert (<= p_13_6 1)) +(assert (>= p_13_7 0)) +(assert (<= p_13_7 1)) +(assert (>= p_13_8 0)) +(assert (<= p_13_8 1)) +(assert (>= p_13_9 0)) +(assert (<= p_13_9 1)) +(assert (>= p_13_10 0)) +(assert (<= p_13_10 1)) +(assert (>= p_13_11 0)) +(assert (<= p_13_11 1)) +(assert (>= p_13_12 0)) +(assert (<= p_13_12 1)) +(assert (>= p_13_13 0)) +(assert (<= p_13_13 1)) +(assert (>= p_14_0 0)) +(assert (<= p_14_0 1)) +(assert (>= p_14_1 0)) +(assert (<= p_14_1 1)) +(assert (>= p_14_2 0)) +(assert (<= p_14_2 1)) +(assert (>= p_14_3 0)) +(assert (<= p_14_3 1)) +(assert (>= p_14_4 0)) +(assert (<= p_14_4 1)) +(assert (>= p_14_5 0)) +(assert (<= p_14_5 1)) +(assert (>= p_14_6 0)) +(assert (<= p_14_6 1)) +(assert (>= p_14_7 0)) +(assert (<= p_14_7 1)) +(assert (>= p_14_8 0)) +(assert (<= p_14_8 1)) +(assert (>= p_14_9 0)) +(assert (<= p_14_9 1)) +(assert (>= p_14_10 0)) +(assert (<= p_14_10 1)) +(assert (>= p_14_11 0)) +(assert (<= p_14_11 1)) +(assert (>= p_14_12 0)) +(assert (<= p_14_12 1)) +(assert (>= p_14_13 0)) +(assert (<= p_14_13 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10 p_0_11 p_0_12 p_0_13) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10 p_1_11 p_1_12 p_1_13) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10 p_2_11 p_2_12 p_2_13) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10 p_3_11 p_3_12 p_3_13) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10 p_4_11 p_4_12 p_4_13) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10 p_5_11 p_5_12 p_5_13) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10 p_6_11 p_6_12 p_6_13) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10 p_7_11 p_7_12 p_7_13) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10 p_8_11 p_8_12 p_8_13) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10 p_9_11 p_9_12 p_9_13) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10 p_10_11 p_10_12 p_10_13) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10 p_11_11 p_11_12 p_11_13) 1)) +(assert (>= (+ p_12_0 p_12_1 p_12_2 p_12_3 p_12_4 p_12_5 p_12_6 p_12_7 p_12_8 p_12_9 p_12_10 p_12_11 p_12_12 p_12_13) 1)) +(assert (>= (+ p_13_0 p_13_1 p_13_2 p_13_3 p_13_4 p_13_5 p_13_6 p_13_7 p_13_8 p_13_9 p_13_10 p_13_11 p_13_12 p_13_13) 1)) +(assert (>= (+ p_14_0 p_14_1 p_14_2 p_14_3 p_14_4 p_14_5 p_14_6 p_14_7 p_14_8 p_14_9 p_14_10 p_14_11 p_14_12 p_14_13) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0 p_12_0 p_13_0 p_14_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1 p_12_1 p_13_1 p_14_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2 p_12_2 p_13_2 p_14_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3 p_12_3 p_13_3 p_14_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4 p_12_4 p_13_4 p_14_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5 p_12_5 p_13_5 p_14_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6 p_12_6 p_13_6 p_14_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7 p_12_7 p_13_7 p_14_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8 p_12_8 p_13_8 p_14_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9 p_12_9 p_13_9 p_14_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10 p_12_10 p_13_10 p_14_10) 1)) +(assert (<= (+ p_0_11 p_1_11 p_2_11 p_3_11 p_4_11 p_5_11 p_6_11 p_7_11 p_8_11 p_9_11 p_10_11 p_11_11 p_12_11 p_13_11 p_14_11) 1)) +(assert (<= (+ p_0_12 p_1_12 p_2_12 p_3_12 p_4_12 p_5_12 p_6_12 p_7_12 p_8_12 p_9_12 p_10_12 p_11_12 p_12_12 p_13_12 p_14_12) 1)) +(assert (<= (+ p_0_13 p_1_13 p_2_13 p_3_13 p_4_13 p_5_13 p_6_13 p_7_13 p_8_13 p_9_13 p_10_13 p_11_13 p_12_13 p_13_13 p_14_13) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-15.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-15.smt2 new file mode 100644 index 0000000..79fc9b1 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-15.smt2 @@ -0,0 +1,757 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_0_11 () Int) +(declare-fun p_0_12 () Int) +(declare-fun p_0_13 () Int) +(declare-fun p_0_14 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_1_11 () Int) +(declare-fun p_1_12 () Int) +(declare-fun p_1_13 () Int) +(declare-fun p_1_14 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_2_11 () Int) +(declare-fun p_2_12 () Int) +(declare-fun p_2_13 () Int) +(declare-fun p_2_14 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_3_11 () Int) +(declare-fun p_3_12 () Int) +(declare-fun p_3_13 () Int) +(declare-fun p_3_14 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_4_11 () Int) +(declare-fun p_4_12 () Int) +(declare-fun p_4_13 () Int) +(declare-fun p_4_14 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_5_11 () Int) +(declare-fun p_5_12 () Int) +(declare-fun p_5_13 () Int) +(declare-fun p_5_14 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_6_11 () Int) +(declare-fun p_6_12 () Int) +(declare-fun p_6_13 () Int) +(declare-fun p_6_14 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_7_11 () Int) +(declare-fun p_7_12 () Int) +(declare-fun p_7_13 () Int) +(declare-fun p_7_14 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_8_11 () Int) +(declare-fun p_8_12 () Int) +(declare-fun p_8_13 () Int) +(declare-fun p_8_14 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_9_11 () Int) +(declare-fun p_9_12 () Int) +(declare-fun p_9_13 () Int) +(declare-fun p_9_14 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_10_11 () Int) +(declare-fun p_10_12 () Int) +(declare-fun p_10_13 () Int) +(declare-fun p_10_14 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(declare-fun p_11_11 () Int) +(declare-fun p_11_12 () Int) +(declare-fun p_11_13 () Int) +(declare-fun p_11_14 () Int) +(declare-fun p_12_0 () Int) +(declare-fun p_12_1 () Int) +(declare-fun p_12_2 () Int) +(declare-fun p_12_3 () Int) +(declare-fun p_12_4 () Int) +(declare-fun p_12_5 () Int) +(declare-fun p_12_6 () Int) +(declare-fun p_12_7 () Int) +(declare-fun p_12_8 () Int) +(declare-fun p_12_9 () Int) +(declare-fun p_12_10 () Int) +(declare-fun p_12_11 () Int) +(declare-fun p_12_12 () Int) +(declare-fun p_12_13 () Int) +(declare-fun p_12_14 () Int) +(declare-fun p_13_0 () Int) +(declare-fun p_13_1 () Int) +(declare-fun p_13_2 () Int) +(declare-fun p_13_3 () Int) +(declare-fun p_13_4 () Int) +(declare-fun p_13_5 () Int) +(declare-fun p_13_6 () Int) +(declare-fun p_13_7 () Int) +(declare-fun p_13_8 () Int) +(declare-fun p_13_9 () Int) +(declare-fun p_13_10 () Int) +(declare-fun p_13_11 () Int) +(declare-fun p_13_12 () Int) +(declare-fun p_13_13 () Int) +(declare-fun p_13_14 () Int) +(declare-fun p_14_0 () Int) +(declare-fun p_14_1 () Int) +(declare-fun p_14_2 () Int) +(declare-fun p_14_3 () Int) +(declare-fun p_14_4 () Int) +(declare-fun p_14_5 () Int) +(declare-fun p_14_6 () Int) +(declare-fun p_14_7 () Int) +(declare-fun p_14_8 () Int) +(declare-fun p_14_9 () Int) +(declare-fun p_14_10 () Int) +(declare-fun p_14_11 () Int) +(declare-fun p_14_12 () Int) +(declare-fun p_14_13 () Int) +(declare-fun p_14_14 () Int) +(declare-fun p_15_0 () Int) +(declare-fun p_15_1 () Int) +(declare-fun p_15_2 () Int) +(declare-fun p_15_3 () Int) +(declare-fun p_15_4 () Int) +(declare-fun p_15_5 () Int) +(declare-fun p_15_6 () Int) +(declare-fun p_15_7 () Int) +(declare-fun p_15_8 () Int) +(declare-fun p_15_9 () Int) +(declare-fun p_15_10 () Int) +(declare-fun p_15_11 () Int) +(declare-fun p_15_12 () Int) +(declare-fun p_15_13 () Int) +(declare-fun p_15_14 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_0_11 0)) +(assert (<= p_0_11 1)) +(assert (>= p_0_12 0)) +(assert (<= p_0_12 1)) +(assert (>= p_0_13 0)) +(assert (<= p_0_13 1)) +(assert (>= p_0_14 0)) +(assert (<= p_0_14 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_1_11 0)) +(assert (<= p_1_11 1)) +(assert (>= p_1_12 0)) +(assert (<= p_1_12 1)) +(assert (>= p_1_13 0)) +(assert (<= p_1_13 1)) +(assert (>= p_1_14 0)) +(assert (<= p_1_14 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_2_11 0)) +(assert (<= p_2_11 1)) +(assert (>= p_2_12 0)) +(assert (<= p_2_12 1)) +(assert (>= p_2_13 0)) +(assert (<= p_2_13 1)) +(assert (>= p_2_14 0)) +(assert (<= p_2_14 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_3_11 0)) +(assert (<= p_3_11 1)) +(assert (>= p_3_12 0)) +(assert (<= p_3_12 1)) +(assert (>= p_3_13 0)) +(assert (<= p_3_13 1)) +(assert (>= p_3_14 0)) +(assert (<= p_3_14 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_4_11 0)) +(assert (<= p_4_11 1)) +(assert (>= p_4_12 0)) +(assert (<= p_4_12 1)) +(assert (>= p_4_13 0)) +(assert (<= p_4_13 1)) +(assert (>= p_4_14 0)) +(assert (<= p_4_14 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_5_11 0)) +(assert (<= p_5_11 1)) +(assert (>= p_5_12 0)) +(assert (<= p_5_12 1)) +(assert (>= p_5_13 0)) +(assert (<= p_5_13 1)) +(assert (>= p_5_14 0)) +(assert (<= p_5_14 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_6_11 0)) +(assert (<= p_6_11 1)) +(assert (>= p_6_12 0)) +(assert (<= p_6_12 1)) +(assert (>= p_6_13 0)) +(assert (<= p_6_13 1)) +(assert (>= p_6_14 0)) +(assert (<= p_6_14 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_7_11 0)) +(assert (<= p_7_11 1)) +(assert (>= p_7_12 0)) +(assert (<= p_7_12 1)) +(assert (>= p_7_13 0)) +(assert (<= p_7_13 1)) +(assert (>= p_7_14 0)) +(assert (<= p_7_14 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_8_11 0)) +(assert (<= p_8_11 1)) +(assert (>= p_8_12 0)) +(assert (<= p_8_12 1)) +(assert (>= p_8_13 0)) +(assert (<= p_8_13 1)) +(assert (>= p_8_14 0)) +(assert (<= p_8_14 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_9_11 0)) +(assert (<= p_9_11 1)) +(assert (>= p_9_12 0)) +(assert (<= p_9_12 1)) +(assert (>= p_9_13 0)) +(assert (<= p_9_13 1)) +(assert (>= p_9_14 0)) +(assert (<= p_9_14 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_10_11 0)) +(assert (<= p_10_11 1)) +(assert (>= p_10_12 0)) +(assert (<= p_10_12 1)) +(assert (>= p_10_13 0)) +(assert (<= p_10_13 1)) +(assert (>= p_10_14 0)) +(assert (<= p_10_14 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= p_11_11 0)) +(assert (<= p_11_11 1)) +(assert (>= p_11_12 0)) +(assert (<= p_11_12 1)) +(assert (>= p_11_13 0)) +(assert (<= p_11_13 1)) +(assert (>= p_11_14 0)) +(assert (<= p_11_14 1)) +(assert (>= p_12_0 0)) +(assert (<= p_12_0 1)) +(assert (>= p_12_1 0)) +(assert (<= p_12_1 1)) +(assert (>= p_12_2 0)) +(assert (<= p_12_2 1)) +(assert (>= p_12_3 0)) +(assert (<= p_12_3 1)) +(assert (>= p_12_4 0)) +(assert (<= p_12_4 1)) +(assert (>= p_12_5 0)) +(assert (<= p_12_5 1)) +(assert (>= p_12_6 0)) +(assert (<= p_12_6 1)) +(assert (>= p_12_7 0)) +(assert (<= p_12_7 1)) +(assert (>= p_12_8 0)) +(assert (<= p_12_8 1)) +(assert (>= p_12_9 0)) +(assert (<= p_12_9 1)) +(assert (>= p_12_10 0)) +(assert (<= p_12_10 1)) +(assert (>= p_12_11 0)) +(assert (<= p_12_11 1)) +(assert (>= p_12_12 0)) +(assert (<= p_12_12 1)) +(assert (>= p_12_13 0)) +(assert (<= p_12_13 1)) +(assert (>= p_12_14 0)) +(assert (<= p_12_14 1)) +(assert (>= p_13_0 0)) +(assert (<= p_13_0 1)) +(assert (>= p_13_1 0)) +(assert (<= p_13_1 1)) +(assert (>= p_13_2 0)) +(assert (<= p_13_2 1)) +(assert (>= p_13_3 0)) +(assert (<= p_13_3 1)) +(assert (>= p_13_4 0)) +(assert (<= p_13_4 1)) +(assert (>= p_13_5 0)) +(assert (<= p_13_5 1)) +(assert (>= p_13_6 0)) +(assert (<= p_13_6 1)) +(assert (>= p_13_7 0)) +(assert (<= p_13_7 1)) +(assert (>= p_13_8 0)) +(assert (<= p_13_8 1)) +(assert (>= p_13_9 0)) +(assert (<= p_13_9 1)) +(assert (>= p_13_10 0)) +(assert (<= p_13_10 1)) +(assert (>= p_13_11 0)) +(assert (<= p_13_11 1)) +(assert (>= p_13_12 0)) +(assert (<= p_13_12 1)) +(assert (>= p_13_13 0)) +(assert (<= p_13_13 1)) +(assert (>= p_13_14 0)) +(assert (<= p_13_14 1)) +(assert (>= p_14_0 0)) +(assert (<= p_14_0 1)) +(assert (>= p_14_1 0)) +(assert (<= p_14_1 1)) +(assert (>= p_14_2 0)) +(assert (<= p_14_2 1)) +(assert (>= p_14_3 0)) +(assert (<= p_14_3 1)) +(assert (>= p_14_4 0)) +(assert (<= p_14_4 1)) +(assert (>= p_14_5 0)) +(assert (<= p_14_5 1)) +(assert (>= p_14_6 0)) +(assert (<= p_14_6 1)) +(assert (>= p_14_7 0)) +(assert (<= p_14_7 1)) +(assert (>= p_14_8 0)) +(assert (<= p_14_8 1)) +(assert (>= p_14_9 0)) +(assert (<= p_14_9 1)) +(assert (>= p_14_10 0)) +(assert (<= p_14_10 1)) +(assert (>= p_14_11 0)) +(assert (<= p_14_11 1)) +(assert (>= p_14_12 0)) +(assert (<= p_14_12 1)) +(assert (>= p_14_13 0)) +(assert (<= p_14_13 1)) +(assert (>= p_14_14 0)) +(assert (<= p_14_14 1)) +(assert (>= p_15_0 0)) +(assert (<= p_15_0 1)) +(assert (>= p_15_1 0)) +(assert (<= p_15_1 1)) +(assert (>= p_15_2 0)) +(assert (<= p_15_2 1)) +(assert (>= p_15_3 0)) +(assert (<= p_15_3 1)) +(assert (>= p_15_4 0)) +(assert (<= p_15_4 1)) +(assert (>= p_15_5 0)) +(assert (<= p_15_5 1)) +(assert (>= p_15_6 0)) +(assert (<= p_15_6 1)) +(assert (>= p_15_7 0)) +(assert (<= p_15_7 1)) +(assert (>= p_15_8 0)) +(assert (<= p_15_8 1)) +(assert (>= p_15_9 0)) +(assert (<= p_15_9 1)) +(assert (>= p_15_10 0)) +(assert (<= p_15_10 1)) +(assert (>= p_15_11 0)) +(assert (<= p_15_11 1)) +(assert (>= p_15_12 0)) +(assert (<= p_15_12 1)) +(assert (>= p_15_13 0)) +(assert (<= p_15_13 1)) +(assert (>= p_15_14 0)) +(assert (<= p_15_14 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10 p_0_11 p_0_12 p_0_13 p_0_14) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10 p_1_11 p_1_12 p_1_13 p_1_14) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10 p_2_11 p_2_12 p_2_13 p_2_14) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10 p_3_11 p_3_12 p_3_13 p_3_14) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10 p_4_11 p_4_12 p_4_13 p_4_14) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10 p_5_11 p_5_12 p_5_13 p_5_14) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10 p_6_11 p_6_12 p_6_13 p_6_14) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10 p_7_11 p_7_12 p_7_13 p_7_14) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10 p_8_11 p_8_12 p_8_13 p_8_14) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10 p_9_11 p_9_12 p_9_13 p_9_14) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10 p_10_11 p_10_12 p_10_13 p_10_14) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10 p_11_11 p_11_12 p_11_13 p_11_14) 1)) +(assert (>= (+ p_12_0 p_12_1 p_12_2 p_12_3 p_12_4 p_12_5 p_12_6 p_12_7 p_12_8 p_12_9 p_12_10 p_12_11 p_12_12 p_12_13 p_12_14) 1)) +(assert (>= (+ p_13_0 p_13_1 p_13_2 p_13_3 p_13_4 p_13_5 p_13_6 p_13_7 p_13_8 p_13_9 p_13_10 p_13_11 p_13_12 p_13_13 p_13_14) 1)) +(assert (>= (+ p_14_0 p_14_1 p_14_2 p_14_3 p_14_4 p_14_5 p_14_6 p_14_7 p_14_8 p_14_9 p_14_10 p_14_11 p_14_12 p_14_13 p_14_14) 1)) +(assert (>= (+ p_15_0 p_15_1 p_15_2 p_15_3 p_15_4 p_15_5 p_15_6 p_15_7 p_15_8 p_15_9 p_15_10 p_15_11 p_15_12 p_15_13 p_15_14) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0 p_12_0 p_13_0 p_14_0 p_15_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1 p_12_1 p_13_1 p_14_1 p_15_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2 p_12_2 p_13_2 p_14_2 p_15_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3 p_12_3 p_13_3 p_14_3 p_15_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4 p_12_4 p_13_4 p_14_4 p_15_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5 p_12_5 p_13_5 p_14_5 p_15_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6 p_12_6 p_13_6 p_14_6 p_15_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7 p_12_7 p_13_7 p_14_7 p_15_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8 p_12_8 p_13_8 p_14_8 p_15_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9 p_12_9 p_13_9 p_14_9 p_15_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10 p_12_10 p_13_10 p_14_10 p_15_10) 1)) +(assert (<= (+ p_0_11 p_1_11 p_2_11 p_3_11 p_4_11 p_5_11 p_6_11 p_7_11 p_8_11 p_9_11 p_10_11 p_11_11 p_12_11 p_13_11 p_14_11 p_15_11) 1)) +(assert (<= (+ p_0_12 p_1_12 p_2_12 p_3_12 p_4_12 p_5_12 p_6_12 p_7_12 p_8_12 p_9_12 p_10_12 p_11_12 p_12_12 p_13_12 p_14_12 p_15_12) 1)) +(assert (<= (+ p_0_13 p_1_13 p_2_13 p_3_13 p_4_13 p_5_13 p_6_13 p_7_13 p_8_13 p_9_13 p_10_13 p_11_13 p_12_13 p_13_13 p_14_13 p_15_13) 1)) +(assert (<= (+ p_0_14 p_1_14 p_2_14 p_3_14 p_4_14 p_5_14 p_6_14 p_7_14 p_8_14 p_9_14 p_10_14 p_11_14 p_12_14 p_13_14 p_14_14 p_15_14) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-16.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-16.smt2 new file mode 100644 index 0000000..3595170 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-16.smt2 @@ -0,0 +1,855 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_0_11 () Int) +(declare-fun p_0_12 () Int) +(declare-fun p_0_13 () Int) +(declare-fun p_0_14 () Int) +(declare-fun p_0_15 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_1_11 () Int) +(declare-fun p_1_12 () Int) +(declare-fun p_1_13 () Int) +(declare-fun p_1_14 () Int) +(declare-fun p_1_15 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_2_11 () Int) +(declare-fun p_2_12 () Int) +(declare-fun p_2_13 () Int) +(declare-fun p_2_14 () Int) +(declare-fun p_2_15 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_3_11 () Int) +(declare-fun p_3_12 () Int) +(declare-fun p_3_13 () Int) +(declare-fun p_3_14 () Int) +(declare-fun p_3_15 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_4_11 () Int) +(declare-fun p_4_12 () Int) +(declare-fun p_4_13 () Int) +(declare-fun p_4_14 () Int) +(declare-fun p_4_15 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_5_11 () Int) +(declare-fun p_5_12 () Int) +(declare-fun p_5_13 () Int) +(declare-fun p_5_14 () Int) +(declare-fun p_5_15 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_6_11 () Int) +(declare-fun p_6_12 () Int) +(declare-fun p_6_13 () Int) +(declare-fun p_6_14 () Int) +(declare-fun p_6_15 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_7_11 () Int) +(declare-fun p_7_12 () Int) +(declare-fun p_7_13 () Int) +(declare-fun p_7_14 () Int) +(declare-fun p_7_15 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_8_11 () Int) +(declare-fun p_8_12 () Int) +(declare-fun p_8_13 () Int) +(declare-fun p_8_14 () Int) +(declare-fun p_8_15 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_9_11 () Int) +(declare-fun p_9_12 () Int) +(declare-fun p_9_13 () Int) +(declare-fun p_9_14 () Int) +(declare-fun p_9_15 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_10_11 () Int) +(declare-fun p_10_12 () Int) +(declare-fun p_10_13 () Int) +(declare-fun p_10_14 () Int) +(declare-fun p_10_15 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(declare-fun p_11_11 () Int) +(declare-fun p_11_12 () Int) +(declare-fun p_11_13 () Int) +(declare-fun p_11_14 () Int) +(declare-fun p_11_15 () Int) +(declare-fun p_12_0 () Int) +(declare-fun p_12_1 () Int) +(declare-fun p_12_2 () Int) +(declare-fun p_12_3 () Int) +(declare-fun p_12_4 () Int) +(declare-fun p_12_5 () Int) +(declare-fun p_12_6 () Int) +(declare-fun p_12_7 () Int) +(declare-fun p_12_8 () Int) +(declare-fun p_12_9 () Int) +(declare-fun p_12_10 () Int) +(declare-fun p_12_11 () Int) +(declare-fun p_12_12 () Int) +(declare-fun p_12_13 () Int) +(declare-fun p_12_14 () Int) +(declare-fun p_12_15 () Int) +(declare-fun p_13_0 () Int) +(declare-fun p_13_1 () Int) +(declare-fun p_13_2 () Int) +(declare-fun p_13_3 () Int) +(declare-fun p_13_4 () Int) +(declare-fun p_13_5 () Int) +(declare-fun p_13_6 () Int) +(declare-fun p_13_7 () Int) +(declare-fun p_13_8 () Int) +(declare-fun p_13_9 () Int) +(declare-fun p_13_10 () Int) +(declare-fun p_13_11 () Int) +(declare-fun p_13_12 () Int) +(declare-fun p_13_13 () Int) +(declare-fun p_13_14 () Int) +(declare-fun p_13_15 () Int) +(declare-fun p_14_0 () Int) +(declare-fun p_14_1 () Int) +(declare-fun p_14_2 () Int) +(declare-fun p_14_3 () Int) +(declare-fun p_14_4 () Int) +(declare-fun p_14_5 () Int) +(declare-fun p_14_6 () Int) +(declare-fun p_14_7 () Int) +(declare-fun p_14_8 () Int) +(declare-fun p_14_9 () Int) +(declare-fun p_14_10 () Int) +(declare-fun p_14_11 () Int) +(declare-fun p_14_12 () Int) +(declare-fun p_14_13 () Int) +(declare-fun p_14_14 () Int) +(declare-fun p_14_15 () Int) +(declare-fun p_15_0 () Int) +(declare-fun p_15_1 () Int) +(declare-fun p_15_2 () Int) +(declare-fun p_15_3 () Int) +(declare-fun p_15_4 () Int) +(declare-fun p_15_5 () Int) +(declare-fun p_15_6 () Int) +(declare-fun p_15_7 () Int) +(declare-fun p_15_8 () Int) +(declare-fun p_15_9 () Int) +(declare-fun p_15_10 () Int) +(declare-fun p_15_11 () Int) +(declare-fun p_15_12 () Int) +(declare-fun p_15_13 () Int) +(declare-fun p_15_14 () Int) +(declare-fun p_15_15 () Int) +(declare-fun p_16_0 () Int) +(declare-fun p_16_1 () Int) +(declare-fun p_16_2 () Int) +(declare-fun p_16_3 () Int) +(declare-fun p_16_4 () Int) +(declare-fun p_16_5 () Int) +(declare-fun p_16_6 () Int) +(declare-fun p_16_7 () Int) +(declare-fun p_16_8 () Int) +(declare-fun p_16_9 () Int) +(declare-fun p_16_10 () Int) +(declare-fun p_16_11 () Int) +(declare-fun p_16_12 () Int) +(declare-fun p_16_13 () Int) +(declare-fun p_16_14 () Int) +(declare-fun p_16_15 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_0_11 0)) +(assert (<= p_0_11 1)) +(assert (>= p_0_12 0)) +(assert (<= p_0_12 1)) +(assert (>= p_0_13 0)) +(assert (<= p_0_13 1)) +(assert (>= p_0_14 0)) +(assert (<= p_0_14 1)) +(assert (>= p_0_15 0)) +(assert (<= p_0_15 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_1_11 0)) +(assert (<= p_1_11 1)) +(assert (>= p_1_12 0)) +(assert (<= p_1_12 1)) +(assert (>= p_1_13 0)) +(assert (<= p_1_13 1)) +(assert (>= p_1_14 0)) +(assert (<= p_1_14 1)) +(assert (>= p_1_15 0)) +(assert (<= p_1_15 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_2_11 0)) +(assert (<= p_2_11 1)) +(assert (>= p_2_12 0)) +(assert (<= p_2_12 1)) +(assert (>= p_2_13 0)) +(assert (<= p_2_13 1)) +(assert (>= p_2_14 0)) +(assert (<= p_2_14 1)) +(assert (>= p_2_15 0)) +(assert (<= p_2_15 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_3_11 0)) +(assert (<= p_3_11 1)) +(assert (>= p_3_12 0)) +(assert (<= p_3_12 1)) +(assert (>= p_3_13 0)) +(assert (<= p_3_13 1)) +(assert (>= p_3_14 0)) +(assert (<= p_3_14 1)) +(assert (>= p_3_15 0)) +(assert (<= p_3_15 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_4_11 0)) +(assert (<= p_4_11 1)) +(assert (>= p_4_12 0)) +(assert (<= p_4_12 1)) +(assert (>= p_4_13 0)) +(assert (<= p_4_13 1)) +(assert (>= p_4_14 0)) +(assert (<= p_4_14 1)) +(assert (>= p_4_15 0)) +(assert (<= p_4_15 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_5_11 0)) +(assert (<= p_5_11 1)) +(assert (>= p_5_12 0)) +(assert (<= p_5_12 1)) +(assert (>= p_5_13 0)) +(assert (<= p_5_13 1)) +(assert (>= p_5_14 0)) +(assert (<= p_5_14 1)) +(assert (>= p_5_15 0)) +(assert (<= p_5_15 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_6_11 0)) +(assert (<= p_6_11 1)) +(assert (>= p_6_12 0)) +(assert (<= p_6_12 1)) +(assert (>= p_6_13 0)) +(assert (<= p_6_13 1)) +(assert (>= p_6_14 0)) +(assert (<= p_6_14 1)) +(assert (>= p_6_15 0)) +(assert (<= p_6_15 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_7_11 0)) +(assert (<= p_7_11 1)) +(assert (>= p_7_12 0)) +(assert (<= p_7_12 1)) +(assert (>= p_7_13 0)) +(assert (<= p_7_13 1)) +(assert (>= p_7_14 0)) +(assert (<= p_7_14 1)) +(assert (>= p_7_15 0)) +(assert (<= p_7_15 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_8_11 0)) +(assert (<= p_8_11 1)) +(assert (>= p_8_12 0)) +(assert (<= p_8_12 1)) +(assert (>= p_8_13 0)) +(assert (<= p_8_13 1)) +(assert (>= p_8_14 0)) +(assert (<= p_8_14 1)) +(assert (>= p_8_15 0)) +(assert (<= p_8_15 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_9_11 0)) +(assert (<= p_9_11 1)) +(assert (>= p_9_12 0)) +(assert (<= p_9_12 1)) +(assert (>= p_9_13 0)) +(assert (<= p_9_13 1)) +(assert (>= p_9_14 0)) +(assert (<= p_9_14 1)) +(assert (>= p_9_15 0)) +(assert (<= p_9_15 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_10_11 0)) +(assert (<= p_10_11 1)) +(assert (>= p_10_12 0)) +(assert (<= p_10_12 1)) +(assert (>= p_10_13 0)) +(assert (<= p_10_13 1)) +(assert (>= p_10_14 0)) +(assert (<= p_10_14 1)) +(assert (>= p_10_15 0)) +(assert (<= p_10_15 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= p_11_11 0)) +(assert (<= p_11_11 1)) +(assert (>= p_11_12 0)) +(assert (<= p_11_12 1)) +(assert (>= p_11_13 0)) +(assert (<= p_11_13 1)) +(assert (>= p_11_14 0)) +(assert (<= p_11_14 1)) +(assert (>= p_11_15 0)) +(assert (<= p_11_15 1)) +(assert (>= p_12_0 0)) +(assert (<= p_12_0 1)) +(assert (>= p_12_1 0)) +(assert (<= p_12_1 1)) +(assert (>= p_12_2 0)) +(assert (<= p_12_2 1)) +(assert (>= p_12_3 0)) +(assert (<= p_12_3 1)) +(assert (>= p_12_4 0)) +(assert (<= p_12_4 1)) +(assert (>= p_12_5 0)) +(assert (<= p_12_5 1)) +(assert (>= p_12_6 0)) +(assert (<= p_12_6 1)) +(assert (>= p_12_7 0)) +(assert (<= p_12_7 1)) +(assert (>= p_12_8 0)) +(assert (<= p_12_8 1)) +(assert (>= p_12_9 0)) +(assert (<= p_12_9 1)) +(assert (>= p_12_10 0)) +(assert (<= p_12_10 1)) +(assert (>= p_12_11 0)) +(assert (<= p_12_11 1)) +(assert (>= p_12_12 0)) +(assert (<= p_12_12 1)) +(assert (>= p_12_13 0)) +(assert (<= p_12_13 1)) +(assert (>= p_12_14 0)) +(assert (<= p_12_14 1)) +(assert (>= p_12_15 0)) +(assert (<= p_12_15 1)) +(assert (>= p_13_0 0)) +(assert (<= p_13_0 1)) +(assert (>= p_13_1 0)) +(assert (<= p_13_1 1)) +(assert (>= p_13_2 0)) +(assert (<= p_13_2 1)) +(assert (>= p_13_3 0)) +(assert (<= p_13_3 1)) +(assert (>= p_13_4 0)) +(assert (<= p_13_4 1)) +(assert (>= p_13_5 0)) +(assert (<= p_13_5 1)) +(assert (>= p_13_6 0)) +(assert (<= p_13_6 1)) +(assert (>= p_13_7 0)) +(assert (<= p_13_7 1)) +(assert (>= p_13_8 0)) +(assert (<= p_13_8 1)) +(assert (>= p_13_9 0)) +(assert (<= p_13_9 1)) +(assert (>= p_13_10 0)) +(assert (<= p_13_10 1)) +(assert (>= p_13_11 0)) +(assert (<= p_13_11 1)) +(assert (>= p_13_12 0)) +(assert (<= p_13_12 1)) +(assert (>= p_13_13 0)) +(assert (<= p_13_13 1)) +(assert (>= p_13_14 0)) +(assert (<= p_13_14 1)) +(assert (>= p_13_15 0)) +(assert (<= p_13_15 1)) +(assert (>= p_14_0 0)) +(assert (<= p_14_0 1)) +(assert (>= p_14_1 0)) +(assert (<= p_14_1 1)) +(assert (>= p_14_2 0)) +(assert (<= p_14_2 1)) +(assert (>= p_14_3 0)) +(assert (<= p_14_3 1)) +(assert (>= p_14_4 0)) +(assert (<= p_14_4 1)) +(assert (>= p_14_5 0)) +(assert (<= p_14_5 1)) +(assert (>= p_14_6 0)) +(assert (<= p_14_6 1)) +(assert (>= p_14_7 0)) +(assert (<= p_14_7 1)) +(assert (>= p_14_8 0)) +(assert (<= p_14_8 1)) +(assert (>= p_14_9 0)) +(assert (<= p_14_9 1)) +(assert (>= p_14_10 0)) +(assert (<= p_14_10 1)) +(assert (>= p_14_11 0)) +(assert (<= p_14_11 1)) +(assert (>= p_14_12 0)) +(assert (<= p_14_12 1)) +(assert (>= p_14_13 0)) +(assert (<= p_14_13 1)) +(assert (>= p_14_14 0)) +(assert (<= p_14_14 1)) +(assert (>= p_14_15 0)) +(assert (<= p_14_15 1)) +(assert (>= p_15_0 0)) +(assert (<= p_15_0 1)) +(assert (>= p_15_1 0)) +(assert (<= p_15_1 1)) +(assert (>= p_15_2 0)) +(assert (<= p_15_2 1)) +(assert (>= p_15_3 0)) +(assert (<= p_15_3 1)) +(assert (>= p_15_4 0)) +(assert (<= p_15_4 1)) +(assert (>= p_15_5 0)) +(assert (<= p_15_5 1)) +(assert (>= p_15_6 0)) +(assert (<= p_15_6 1)) +(assert (>= p_15_7 0)) +(assert (<= p_15_7 1)) +(assert (>= p_15_8 0)) +(assert (<= p_15_8 1)) +(assert (>= p_15_9 0)) +(assert (<= p_15_9 1)) +(assert (>= p_15_10 0)) +(assert (<= p_15_10 1)) +(assert (>= p_15_11 0)) +(assert (<= p_15_11 1)) +(assert (>= p_15_12 0)) +(assert (<= p_15_12 1)) +(assert (>= p_15_13 0)) +(assert (<= p_15_13 1)) +(assert (>= p_15_14 0)) +(assert (<= p_15_14 1)) +(assert (>= p_15_15 0)) +(assert (<= p_15_15 1)) +(assert (>= p_16_0 0)) +(assert (<= p_16_0 1)) +(assert (>= p_16_1 0)) +(assert (<= p_16_1 1)) +(assert (>= p_16_2 0)) +(assert (<= p_16_2 1)) +(assert (>= p_16_3 0)) +(assert (<= p_16_3 1)) +(assert (>= p_16_4 0)) +(assert (<= p_16_4 1)) +(assert (>= p_16_5 0)) +(assert (<= p_16_5 1)) +(assert (>= p_16_6 0)) +(assert (<= p_16_6 1)) +(assert (>= p_16_7 0)) +(assert (<= p_16_7 1)) +(assert (>= p_16_8 0)) +(assert (<= p_16_8 1)) +(assert (>= p_16_9 0)) +(assert (<= p_16_9 1)) +(assert (>= p_16_10 0)) +(assert (<= p_16_10 1)) +(assert (>= p_16_11 0)) +(assert (<= p_16_11 1)) +(assert (>= p_16_12 0)) +(assert (<= p_16_12 1)) +(assert (>= p_16_13 0)) +(assert (<= p_16_13 1)) +(assert (>= p_16_14 0)) +(assert (<= p_16_14 1)) +(assert (>= p_16_15 0)) +(assert (<= p_16_15 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10 p_0_11 p_0_12 p_0_13 p_0_14 p_0_15) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10 p_1_11 p_1_12 p_1_13 p_1_14 p_1_15) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10 p_2_11 p_2_12 p_2_13 p_2_14 p_2_15) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10 p_3_11 p_3_12 p_3_13 p_3_14 p_3_15) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10 p_4_11 p_4_12 p_4_13 p_4_14 p_4_15) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10 p_5_11 p_5_12 p_5_13 p_5_14 p_5_15) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10 p_6_11 p_6_12 p_6_13 p_6_14 p_6_15) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10 p_7_11 p_7_12 p_7_13 p_7_14 p_7_15) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10 p_8_11 p_8_12 p_8_13 p_8_14 p_8_15) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10 p_9_11 p_9_12 p_9_13 p_9_14 p_9_15) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10 p_10_11 p_10_12 p_10_13 p_10_14 p_10_15) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10 p_11_11 p_11_12 p_11_13 p_11_14 p_11_15) 1)) +(assert (>= (+ p_12_0 p_12_1 p_12_2 p_12_3 p_12_4 p_12_5 p_12_6 p_12_7 p_12_8 p_12_9 p_12_10 p_12_11 p_12_12 p_12_13 p_12_14 p_12_15) 1)) +(assert (>= (+ p_13_0 p_13_1 p_13_2 p_13_3 p_13_4 p_13_5 p_13_6 p_13_7 p_13_8 p_13_9 p_13_10 p_13_11 p_13_12 p_13_13 p_13_14 p_13_15) 1)) +(assert (>= (+ p_14_0 p_14_1 p_14_2 p_14_3 p_14_4 p_14_5 p_14_6 p_14_7 p_14_8 p_14_9 p_14_10 p_14_11 p_14_12 p_14_13 p_14_14 p_14_15) 1)) +(assert (>= (+ p_15_0 p_15_1 p_15_2 p_15_3 p_15_4 p_15_5 p_15_6 p_15_7 p_15_8 p_15_9 p_15_10 p_15_11 p_15_12 p_15_13 p_15_14 p_15_15) 1)) +(assert (>= (+ p_16_0 p_16_1 p_16_2 p_16_3 p_16_4 p_16_5 p_16_6 p_16_7 p_16_8 p_16_9 p_16_10 p_16_11 p_16_12 p_16_13 p_16_14 p_16_15) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0 p_12_0 p_13_0 p_14_0 p_15_0 p_16_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1 p_12_1 p_13_1 p_14_1 p_15_1 p_16_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2 p_12_2 p_13_2 p_14_2 p_15_2 p_16_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3 p_12_3 p_13_3 p_14_3 p_15_3 p_16_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4 p_12_4 p_13_4 p_14_4 p_15_4 p_16_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5 p_12_5 p_13_5 p_14_5 p_15_5 p_16_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6 p_12_6 p_13_6 p_14_6 p_15_6 p_16_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7 p_12_7 p_13_7 p_14_7 p_15_7 p_16_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8 p_12_8 p_13_8 p_14_8 p_15_8 p_16_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9 p_12_9 p_13_9 p_14_9 p_15_9 p_16_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10 p_12_10 p_13_10 p_14_10 p_15_10 p_16_10) 1)) +(assert (<= (+ p_0_11 p_1_11 p_2_11 p_3_11 p_4_11 p_5_11 p_6_11 p_7_11 p_8_11 p_9_11 p_10_11 p_11_11 p_12_11 p_13_11 p_14_11 p_15_11 p_16_11) 1)) +(assert (<= (+ p_0_12 p_1_12 p_2_12 p_3_12 p_4_12 p_5_12 p_6_12 p_7_12 p_8_12 p_9_12 p_10_12 p_11_12 p_12_12 p_13_12 p_14_12 p_15_12 p_16_12) 1)) +(assert (<= (+ p_0_13 p_1_13 p_2_13 p_3_13 p_4_13 p_5_13 p_6_13 p_7_13 p_8_13 p_9_13 p_10_13 p_11_13 p_12_13 p_13_13 p_14_13 p_15_13 p_16_13) 1)) +(assert (<= (+ p_0_14 p_1_14 p_2_14 p_3_14 p_4_14 p_5_14 p_6_14 p_7_14 p_8_14 p_9_14 p_10_14 p_11_14 p_12_14 p_13_14 p_14_14 p_15_14 p_16_14) 1)) +(assert (<= (+ p_0_15 p_1_15 p_2_15 p_3_15 p_4_15 p_5_15 p_6_15 p_7_15 p_8_15 p_9_15 p_10_15 p_11_15 p_12_15 p_13_15 p_14_15 p_15_15 p_16_15) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-17.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-17.smt2 new file mode 100644 index 0000000..8837cf9 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-17.smt2 @@ -0,0 +1,959 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_0_11 () Int) +(declare-fun p_0_12 () Int) +(declare-fun p_0_13 () Int) +(declare-fun p_0_14 () Int) +(declare-fun p_0_15 () Int) +(declare-fun p_0_16 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_1_11 () Int) +(declare-fun p_1_12 () Int) +(declare-fun p_1_13 () Int) +(declare-fun p_1_14 () Int) +(declare-fun p_1_15 () Int) +(declare-fun p_1_16 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_2_11 () Int) +(declare-fun p_2_12 () Int) +(declare-fun p_2_13 () Int) +(declare-fun p_2_14 () Int) +(declare-fun p_2_15 () Int) +(declare-fun p_2_16 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_3_11 () Int) +(declare-fun p_3_12 () Int) +(declare-fun p_3_13 () Int) +(declare-fun p_3_14 () Int) +(declare-fun p_3_15 () Int) +(declare-fun p_3_16 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_4_11 () Int) +(declare-fun p_4_12 () Int) +(declare-fun p_4_13 () Int) +(declare-fun p_4_14 () Int) +(declare-fun p_4_15 () Int) +(declare-fun p_4_16 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_5_11 () Int) +(declare-fun p_5_12 () Int) +(declare-fun p_5_13 () Int) +(declare-fun p_5_14 () Int) +(declare-fun p_5_15 () Int) +(declare-fun p_5_16 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_6_11 () Int) +(declare-fun p_6_12 () Int) +(declare-fun p_6_13 () Int) +(declare-fun p_6_14 () Int) +(declare-fun p_6_15 () Int) +(declare-fun p_6_16 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_7_11 () Int) +(declare-fun p_7_12 () Int) +(declare-fun p_7_13 () Int) +(declare-fun p_7_14 () Int) +(declare-fun p_7_15 () Int) +(declare-fun p_7_16 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_8_11 () Int) +(declare-fun p_8_12 () Int) +(declare-fun p_8_13 () Int) +(declare-fun p_8_14 () Int) +(declare-fun p_8_15 () Int) +(declare-fun p_8_16 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_9_11 () Int) +(declare-fun p_9_12 () Int) +(declare-fun p_9_13 () Int) +(declare-fun p_9_14 () Int) +(declare-fun p_9_15 () Int) +(declare-fun p_9_16 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_10_11 () Int) +(declare-fun p_10_12 () Int) +(declare-fun p_10_13 () Int) +(declare-fun p_10_14 () Int) +(declare-fun p_10_15 () Int) +(declare-fun p_10_16 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(declare-fun p_11_11 () Int) +(declare-fun p_11_12 () Int) +(declare-fun p_11_13 () Int) +(declare-fun p_11_14 () Int) +(declare-fun p_11_15 () Int) +(declare-fun p_11_16 () Int) +(declare-fun p_12_0 () Int) +(declare-fun p_12_1 () Int) +(declare-fun p_12_2 () Int) +(declare-fun p_12_3 () Int) +(declare-fun p_12_4 () Int) +(declare-fun p_12_5 () Int) +(declare-fun p_12_6 () Int) +(declare-fun p_12_7 () Int) +(declare-fun p_12_8 () Int) +(declare-fun p_12_9 () Int) +(declare-fun p_12_10 () Int) +(declare-fun p_12_11 () Int) +(declare-fun p_12_12 () Int) +(declare-fun p_12_13 () Int) +(declare-fun p_12_14 () Int) +(declare-fun p_12_15 () Int) +(declare-fun p_12_16 () Int) +(declare-fun p_13_0 () Int) +(declare-fun p_13_1 () Int) +(declare-fun p_13_2 () Int) +(declare-fun p_13_3 () Int) +(declare-fun p_13_4 () Int) +(declare-fun p_13_5 () Int) +(declare-fun p_13_6 () Int) +(declare-fun p_13_7 () Int) +(declare-fun p_13_8 () Int) +(declare-fun p_13_9 () Int) +(declare-fun p_13_10 () Int) +(declare-fun p_13_11 () Int) +(declare-fun p_13_12 () Int) +(declare-fun p_13_13 () Int) +(declare-fun p_13_14 () Int) +(declare-fun p_13_15 () Int) +(declare-fun p_13_16 () Int) +(declare-fun p_14_0 () Int) +(declare-fun p_14_1 () Int) +(declare-fun p_14_2 () Int) +(declare-fun p_14_3 () Int) +(declare-fun p_14_4 () Int) +(declare-fun p_14_5 () Int) +(declare-fun p_14_6 () Int) +(declare-fun p_14_7 () Int) +(declare-fun p_14_8 () Int) +(declare-fun p_14_9 () Int) +(declare-fun p_14_10 () Int) +(declare-fun p_14_11 () Int) +(declare-fun p_14_12 () Int) +(declare-fun p_14_13 () Int) +(declare-fun p_14_14 () Int) +(declare-fun p_14_15 () Int) +(declare-fun p_14_16 () Int) +(declare-fun p_15_0 () Int) +(declare-fun p_15_1 () Int) +(declare-fun p_15_2 () Int) +(declare-fun p_15_3 () Int) +(declare-fun p_15_4 () Int) +(declare-fun p_15_5 () Int) +(declare-fun p_15_6 () Int) +(declare-fun p_15_7 () Int) +(declare-fun p_15_8 () Int) +(declare-fun p_15_9 () Int) +(declare-fun p_15_10 () Int) +(declare-fun p_15_11 () Int) +(declare-fun p_15_12 () Int) +(declare-fun p_15_13 () Int) +(declare-fun p_15_14 () Int) +(declare-fun p_15_15 () Int) +(declare-fun p_15_16 () Int) +(declare-fun p_16_0 () Int) +(declare-fun p_16_1 () Int) +(declare-fun p_16_2 () Int) +(declare-fun p_16_3 () Int) +(declare-fun p_16_4 () Int) +(declare-fun p_16_5 () Int) +(declare-fun p_16_6 () Int) +(declare-fun p_16_7 () Int) +(declare-fun p_16_8 () Int) +(declare-fun p_16_9 () Int) +(declare-fun p_16_10 () Int) +(declare-fun p_16_11 () Int) +(declare-fun p_16_12 () Int) +(declare-fun p_16_13 () Int) +(declare-fun p_16_14 () Int) +(declare-fun p_16_15 () Int) +(declare-fun p_16_16 () Int) +(declare-fun p_17_0 () Int) +(declare-fun p_17_1 () Int) +(declare-fun p_17_2 () Int) +(declare-fun p_17_3 () Int) +(declare-fun p_17_4 () Int) +(declare-fun p_17_5 () Int) +(declare-fun p_17_6 () Int) +(declare-fun p_17_7 () Int) +(declare-fun p_17_8 () Int) +(declare-fun p_17_9 () Int) +(declare-fun p_17_10 () Int) +(declare-fun p_17_11 () Int) +(declare-fun p_17_12 () Int) +(declare-fun p_17_13 () Int) +(declare-fun p_17_14 () Int) +(declare-fun p_17_15 () Int) +(declare-fun p_17_16 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_0_11 0)) +(assert (<= p_0_11 1)) +(assert (>= p_0_12 0)) +(assert (<= p_0_12 1)) +(assert (>= p_0_13 0)) +(assert (<= p_0_13 1)) +(assert (>= p_0_14 0)) +(assert (<= p_0_14 1)) +(assert (>= p_0_15 0)) +(assert (<= p_0_15 1)) +(assert (>= p_0_16 0)) +(assert (<= p_0_16 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_1_11 0)) +(assert (<= p_1_11 1)) +(assert (>= p_1_12 0)) +(assert (<= p_1_12 1)) +(assert (>= p_1_13 0)) +(assert (<= p_1_13 1)) +(assert (>= p_1_14 0)) +(assert (<= p_1_14 1)) +(assert (>= p_1_15 0)) +(assert (<= p_1_15 1)) +(assert (>= p_1_16 0)) +(assert (<= p_1_16 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_2_11 0)) +(assert (<= p_2_11 1)) +(assert (>= p_2_12 0)) +(assert (<= p_2_12 1)) +(assert (>= p_2_13 0)) +(assert (<= p_2_13 1)) +(assert (>= p_2_14 0)) +(assert (<= p_2_14 1)) +(assert (>= p_2_15 0)) +(assert (<= p_2_15 1)) +(assert (>= p_2_16 0)) +(assert (<= p_2_16 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_3_11 0)) +(assert (<= p_3_11 1)) +(assert (>= p_3_12 0)) +(assert (<= p_3_12 1)) +(assert (>= p_3_13 0)) +(assert (<= p_3_13 1)) +(assert (>= p_3_14 0)) +(assert (<= p_3_14 1)) +(assert (>= p_3_15 0)) +(assert (<= p_3_15 1)) +(assert (>= p_3_16 0)) +(assert (<= p_3_16 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_4_11 0)) +(assert (<= p_4_11 1)) +(assert (>= p_4_12 0)) +(assert (<= p_4_12 1)) +(assert (>= p_4_13 0)) +(assert (<= p_4_13 1)) +(assert (>= p_4_14 0)) +(assert (<= p_4_14 1)) +(assert (>= p_4_15 0)) +(assert (<= p_4_15 1)) +(assert (>= p_4_16 0)) +(assert (<= p_4_16 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_5_11 0)) +(assert (<= p_5_11 1)) +(assert (>= p_5_12 0)) +(assert (<= p_5_12 1)) +(assert (>= p_5_13 0)) +(assert (<= p_5_13 1)) +(assert (>= p_5_14 0)) +(assert (<= p_5_14 1)) +(assert (>= p_5_15 0)) +(assert (<= p_5_15 1)) +(assert (>= p_5_16 0)) +(assert (<= p_5_16 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_6_11 0)) +(assert (<= p_6_11 1)) +(assert (>= p_6_12 0)) +(assert (<= p_6_12 1)) +(assert (>= p_6_13 0)) +(assert (<= p_6_13 1)) +(assert (>= p_6_14 0)) +(assert (<= p_6_14 1)) +(assert (>= p_6_15 0)) +(assert (<= p_6_15 1)) +(assert (>= p_6_16 0)) +(assert (<= p_6_16 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_7_11 0)) +(assert (<= p_7_11 1)) +(assert (>= p_7_12 0)) +(assert (<= p_7_12 1)) +(assert (>= p_7_13 0)) +(assert (<= p_7_13 1)) +(assert (>= p_7_14 0)) +(assert (<= p_7_14 1)) +(assert (>= p_7_15 0)) +(assert (<= p_7_15 1)) +(assert (>= p_7_16 0)) +(assert (<= p_7_16 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_8_11 0)) +(assert (<= p_8_11 1)) +(assert (>= p_8_12 0)) +(assert (<= p_8_12 1)) +(assert (>= p_8_13 0)) +(assert (<= p_8_13 1)) +(assert (>= p_8_14 0)) +(assert (<= p_8_14 1)) +(assert (>= p_8_15 0)) +(assert (<= p_8_15 1)) +(assert (>= p_8_16 0)) +(assert (<= p_8_16 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_9_11 0)) +(assert (<= p_9_11 1)) +(assert (>= p_9_12 0)) +(assert (<= p_9_12 1)) +(assert (>= p_9_13 0)) +(assert (<= p_9_13 1)) +(assert (>= p_9_14 0)) +(assert (<= p_9_14 1)) +(assert (>= p_9_15 0)) +(assert (<= p_9_15 1)) +(assert (>= p_9_16 0)) +(assert (<= p_9_16 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_10_11 0)) +(assert (<= p_10_11 1)) +(assert (>= p_10_12 0)) +(assert (<= p_10_12 1)) +(assert (>= p_10_13 0)) +(assert (<= p_10_13 1)) +(assert (>= p_10_14 0)) +(assert (<= p_10_14 1)) +(assert (>= p_10_15 0)) +(assert (<= p_10_15 1)) +(assert (>= p_10_16 0)) +(assert (<= p_10_16 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= p_11_11 0)) +(assert (<= p_11_11 1)) +(assert (>= p_11_12 0)) +(assert (<= p_11_12 1)) +(assert (>= p_11_13 0)) +(assert (<= p_11_13 1)) +(assert (>= p_11_14 0)) +(assert (<= p_11_14 1)) +(assert (>= p_11_15 0)) +(assert (<= p_11_15 1)) +(assert (>= p_11_16 0)) +(assert (<= p_11_16 1)) +(assert (>= p_12_0 0)) +(assert (<= p_12_0 1)) +(assert (>= p_12_1 0)) +(assert (<= p_12_1 1)) +(assert (>= p_12_2 0)) +(assert (<= p_12_2 1)) +(assert (>= p_12_3 0)) +(assert (<= p_12_3 1)) +(assert (>= p_12_4 0)) +(assert (<= p_12_4 1)) +(assert (>= p_12_5 0)) +(assert (<= p_12_5 1)) +(assert (>= p_12_6 0)) +(assert (<= p_12_6 1)) +(assert (>= p_12_7 0)) +(assert (<= p_12_7 1)) +(assert (>= p_12_8 0)) +(assert (<= p_12_8 1)) +(assert (>= p_12_9 0)) +(assert (<= p_12_9 1)) +(assert (>= p_12_10 0)) +(assert (<= p_12_10 1)) +(assert (>= p_12_11 0)) +(assert (<= p_12_11 1)) +(assert (>= p_12_12 0)) +(assert (<= p_12_12 1)) +(assert (>= p_12_13 0)) +(assert (<= p_12_13 1)) +(assert (>= p_12_14 0)) +(assert (<= p_12_14 1)) +(assert (>= p_12_15 0)) +(assert (<= p_12_15 1)) +(assert (>= p_12_16 0)) +(assert (<= p_12_16 1)) +(assert (>= p_13_0 0)) +(assert (<= p_13_0 1)) +(assert (>= p_13_1 0)) +(assert (<= p_13_1 1)) +(assert (>= p_13_2 0)) +(assert (<= p_13_2 1)) +(assert (>= p_13_3 0)) +(assert (<= p_13_3 1)) +(assert (>= p_13_4 0)) +(assert (<= p_13_4 1)) +(assert (>= p_13_5 0)) +(assert (<= p_13_5 1)) +(assert (>= p_13_6 0)) +(assert (<= p_13_6 1)) +(assert (>= p_13_7 0)) +(assert (<= p_13_7 1)) +(assert (>= p_13_8 0)) +(assert (<= p_13_8 1)) +(assert (>= p_13_9 0)) +(assert (<= p_13_9 1)) +(assert (>= p_13_10 0)) +(assert (<= p_13_10 1)) +(assert (>= p_13_11 0)) +(assert (<= p_13_11 1)) +(assert (>= p_13_12 0)) +(assert (<= p_13_12 1)) +(assert (>= p_13_13 0)) +(assert (<= p_13_13 1)) +(assert (>= p_13_14 0)) +(assert (<= p_13_14 1)) +(assert (>= p_13_15 0)) +(assert (<= p_13_15 1)) +(assert (>= p_13_16 0)) +(assert (<= p_13_16 1)) +(assert (>= p_14_0 0)) +(assert (<= p_14_0 1)) +(assert (>= p_14_1 0)) +(assert (<= p_14_1 1)) +(assert (>= p_14_2 0)) +(assert (<= p_14_2 1)) +(assert (>= p_14_3 0)) +(assert (<= p_14_3 1)) +(assert (>= p_14_4 0)) +(assert (<= p_14_4 1)) +(assert (>= p_14_5 0)) +(assert (<= p_14_5 1)) +(assert (>= p_14_6 0)) +(assert (<= p_14_6 1)) +(assert (>= p_14_7 0)) +(assert (<= p_14_7 1)) +(assert (>= p_14_8 0)) +(assert (<= p_14_8 1)) +(assert (>= p_14_9 0)) +(assert (<= p_14_9 1)) +(assert (>= p_14_10 0)) +(assert (<= p_14_10 1)) +(assert (>= p_14_11 0)) +(assert (<= p_14_11 1)) +(assert (>= p_14_12 0)) +(assert (<= p_14_12 1)) +(assert (>= p_14_13 0)) +(assert (<= p_14_13 1)) +(assert (>= p_14_14 0)) +(assert (<= p_14_14 1)) +(assert (>= p_14_15 0)) +(assert (<= p_14_15 1)) +(assert (>= p_14_16 0)) +(assert (<= p_14_16 1)) +(assert (>= p_15_0 0)) +(assert (<= p_15_0 1)) +(assert (>= p_15_1 0)) +(assert (<= p_15_1 1)) +(assert (>= p_15_2 0)) +(assert (<= p_15_2 1)) +(assert (>= p_15_3 0)) +(assert (<= p_15_3 1)) +(assert (>= p_15_4 0)) +(assert (<= p_15_4 1)) +(assert (>= p_15_5 0)) +(assert (<= p_15_5 1)) +(assert (>= p_15_6 0)) +(assert (<= p_15_6 1)) +(assert (>= p_15_7 0)) +(assert (<= p_15_7 1)) +(assert (>= p_15_8 0)) +(assert (<= p_15_8 1)) +(assert (>= p_15_9 0)) +(assert (<= p_15_9 1)) +(assert (>= p_15_10 0)) +(assert (<= p_15_10 1)) +(assert (>= p_15_11 0)) +(assert (<= p_15_11 1)) +(assert (>= p_15_12 0)) +(assert (<= p_15_12 1)) +(assert (>= p_15_13 0)) +(assert (<= p_15_13 1)) +(assert (>= p_15_14 0)) +(assert (<= p_15_14 1)) +(assert (>= p_15_15 0)) +(assert (<= p_15_15 1)) +(assert (>= p_15_16 0)) +(assert (<= p_15_16 1)) +(assert (>= p_16_0 0)) +(assert (<= p_16_0 1)) +(assert (>= p_16_1 0)) +(assert (<= p_16_1 1)) +(assert (>= p_16_2 0)) +(assert (<= p_16_2 1)) +(assert (>= p_16_3 0)) +(assert (<= p_16_3 1)) +(assert (>= p_16_4 0)) +(assert (<= p_16_4 1)) +(assert (>= p_16_5 0)) +(assert (<= p_16_5 1)) +(assert (>= p_16_6 0)) +(assert (<= p_16_6 1)) +(assert (>= p_16_7 0)) +(assert (<= p_16_7 1)) +(assert (>= p_16_8 0)) +(assert (<= p_16_8 1)) +(assert (>= p_16_9 0)) +(assert (<= p_16_9 1)) +(assert (>= p_16_10 0)) +(assert (<= p_16_10 1)) +(assert (>= p_16_11 0)) +(assert (<= p_16_11 1)) +(assert (>= p_16_12 0)) +(assert (<= p_16_12 1)) +(assert (>= p_16_13 0)) +(assert (<= p_16_13 1)) +(assert (>= p_16_14 0)) +(assert (<= p_16_14 1)) +(assert (>= p_16_15 0)) +(assert (<= p_16_15 1)) +(assert (>= p_16_16 0)) +(assert (<= p_16_16 1)) +(assert (>= p_17_0 0)) +(assert (<= p_17_0 1)) +(assert (>= p_17_1 0)) +(assert (<= p_17_1 1)) +(assert (>= p_17_2 0)) +(assert (<= p_17_2 1)) +(assert (>= p_17_3 0)) +(assert (<= p_17_3 1)) +(assert (>= p_17_4 0)) +(assert (<= p_17_4 1)) +(assert (>= p_17_5 0)) +(assert (<= p_17_5 1)) +(assert (>= p_17_6 0)) +(assert (<= p_17_6 1)) +(assert (>= p_17_7 0)) +(assert (<= p_17_7 1)) +(assert (>= p_17_8 0)) +(assert (<= p_17_8 1)) +(assert (>= p_17_9 0)) +(assert (<= p_17_9 1)) +(assert (>= p_17_10 0)) +(assert (<= p_17_10 1)) +(assert (>= p_17_11 0)) +(assert (<= p_17_11 1)) +(assert (>= p_17_12 0)) +(assert (<= p_17_12 1)) +(assert (>= p_17_13 0)) +(assert (<= p_17_13 1)) +(assert (>= p_17_14 0)) +(assert (<= p_17_14 1)) +(assert (>= p_17_15 0)) +(assert (<= p_17_15 1)) +(assert (>= p_17_16 0)) +(assert (<= p_17_16 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10 p_0_11 p_0_12 p_0_13 p_0_14 p_0_15 p_0_16) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10 p_1_11 p_1_12 p_1_13 p_1_14 p_1_15 p_1_16) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10 p_2_11 p_2_12 p_2_13 p_2_14 p_2_15 p_2_16) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10 p_3_11 p_3_12 p_3_13 p_3_14 p_3_15 p_3_16) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10 p_4_11 p_4_12 p_4_13 p_4_14 p_4_15 p_4_16) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10 p_5_11 p_5_12 p_5_13 p_5_14 p_5_15 p_5_16) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10 p_6_11 p_6_12 p_6_13 p_6_14 p_6_15 p_6_16) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10 p_7_11 p_7_12 p_7_13 p_7_14 p_7_15 p_7_16) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10 p_8_11 p_8_12 p_8_13 p_8_14 p_8_15 p_8_16) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10 p_9_11 p_9_12 p_9_13 p_9_14 p_9_15 p_9_16) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10 p_10_11 p_10_12 p_10_13 p_10_14 p_10_15 p_10_16) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10 p_11_11 p_11_12 p_11_13 p_11_14 p_11_15 p_11_16) 1)) +(assert (>= (+ p_12_0 p_12_1 p_12_2 p_12_3 p_12_4 p_12_5 p_12_6 p_12_7 p_12_8 p_12_9 p_12_10 p_12_11 p_12_12 p_12_13 p_12_14 p_12_15 p_12_16) 1)) +(assert (>= (+ p_13_0 p_13_1 p_13_2 p_13_3 p_13_4 p_13_5 p_13_6 p_13_7 p_13_8 p_13_9 p_13_10 p_13_11 p_13_12 p_13_13 p_13_14 p_13_15 p_13_16) 1)) +(assert (>= (+ p_14_0 p_14_1 p_14_2 p_14_3 p_14_4 p_14_5 p_14_6 p_14_7 p_14_8 p_14_9 p_14_10 p_14_11 p_14_12 p_14_13 p_14_14 p_14_15 p_14_16) 1)) +(assert (>= (+ p_15_0 p_15_1 p_15_2 p_15_3 p_15_4 p_15_5 p_15_6 p_15_7 p_15_8 p_15_9 p_15_10 p_15_11 p_15_12 p_15_13 p_15_14 p_15_15 p_15_16) 1)) +(assert (>= (+ p_16_0 p_16_1 p_16_2 p_16_3 p_16_4 p_16_5 p_16_6 p_16_7 p_16_8 p_16_9 p_16_10 p_16_11 p_16_12 p_16_13 p_16_14 p_16_15 p_16_16) 1)) +(assert (>= (+ p_17_0 p_17_1 p_17_2 p_17_3 p_17_4 p_17_5 p_17_6 p_17_7 p_17_8 p_17_9 p_17_10 p_17_11 p_17_12 p_17_13 p_17_14 p_17_15 p_17_16) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0 p_12_0 p_13_0 p_14_0 p_15_0 p_16_0 p_17_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1 p_12_1 p_13_1 p_14_1 p_15_1 p_16_1 p_17_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2 p_12_2 p_13_2 p_14_2 p_15_2 p_16_2 p_17_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3 p_12_3 p_13_3 p_14_3 p_15_3 p_16_3 p_17_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4 p_12_4 p_13_4 p_14_4 p_15_4 p_16_4 p_17_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5 p_12_5 p_13_5 p_14_5 p_15_5 p_16_5 p_17_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6 p_12_6 p_13_6 p_14_6 p_15_6 p_16_6 p_17_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7 p_12_7 p_13_7 p_14_7 p_15_7 p_16_7 p_17_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8 p_12_8 p_13_8 p_14_8 p_15_8 p_16_8 p_17_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9 p_12_9 p_13_9 p_14_9 p_15_9 p_16_9 p_17_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10 p_12_10 p_13_10 p_14_10 p_15_10 p_16_10 p_17_10) 1)) +(assert (<= (+ p_0_11 p_1_11 p_2_11 p_3_11 p_4_11 p_5_11 p_6_11 p_7_11 p_8_11 p_9_11 p_10_11 p_11_11 p_12_11 p_13_11 p_14_11 p_15_11 p_16_11 p_17_11) 1)) +(assert (<= (+ p_0_12 p_1_12 p_2_12 p_3_12 p_4_12 p_5_12 p_6_12 p_7_12 p_8_12 p_9_12 p_10_12 p_11_12 p_12_12 p_13_12 p_14_12 p_15_12 p_16_12 p_17_12) 1)) +(assert (<= (+ p_0_13 p_1_13 p_2_13 p_3_13 p_4_13 p_5_13 p_6_13 p_7_13 p_8_13 p_9_13 p_10_13 p_11_13 p_12_13 p_13_13 p_14_13 p_15_13 p_16_13 p_17_13) 1)) +(assert (<= (+ p_0_14 p_1_14 p_2_14 p_3_14 p_4_14 p_5_14 p_6_14 p_7_14 p_8_14 p_9_14 p_10_14 p_11_14 p_12_14 p_13_14 p_14_14 p_15_14 p_16_14 p_17_14) 1)) +(assert (<= (+ p_0_15 p_1_15 p_2_15 p_3_15 p_4_15 p_5_15 p_6_15 p_7_15 p_8_15 p_9_15 p_10_15 p_11_15 p_12_15 p_13_15 p_14_15 p_15_15 p_16_15 p_17_15) 1)) +(assert (<= (+ p_0_16 p_1_16 p_2_16 p_3_16 p_4_16 p_5_16 p_6_16 p_7_16 p_8_16 p_9_16 p_10_16 p_11_16 p_12_16 p_13_16 p_14_16 p_15_16 p_16_16 p_17_16) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-18.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-18.smt2 new file mode 100644 index 0000000..a22f8fc --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-18.smt2 @@ -0,0 +1,1069 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_0_11 () Int) +(declare-fun p_0_12 () Int) +(declare-fun p_0_13 () Int) +(declare-fun p_0_14 () Int) +(declare-fun p_0_15 () Int) +(declare-fun p_0_16 () Int) +(declare-fun p_0_17 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_1_11 () Int) +(declare-fun p_1_12 () Int) +(declare-fun p_1_13 () Int) +(declare-fun p_1_14 () Int) +(declare-fun p_1_15 () Int) +(declare-fun p_1_16 () Int) +(declare-fun p_1_17 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_2_11 () Int) +(declare-fun p_2_12 () Int) +(declare-fun p_2_13 () Int) +(declare-fun p_2_14 () Int) +(declare-fun p_2_15 () Int) +(declare-fun p_2_16 () Int) +(declare-fun p_2_17 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_3_11 () Int) +(declare-fun p_3_12 () Int) +(declare-fun p_3_13 () Int) +(declare-fun p_3_14 () Int) +(declare-fun p_3_15 () Int) +(declare-fun p_3_16 () Int) +(declare-fun p_3_17 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_4_11 () Int) +(declare-fun p_4_12 () Int) +(declare-fun p_4_13 () Int) +(declare-fun p_4_14 () Int) +(declare-fun p_4_15 () Int) +(declare-fun p_4_16 () Int) +(declare-fun p_4_17 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_5_11 () Int) +(declare-fun p_5_12 () Int) +(declare-fun p_5_13 () Int) +(declare-fun p_5_14 () Int) +(declare-fun p_5_15 () Int) +(declare-fun p_5_16 () Int) +(declare-fun p_5_17 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_6_11 () Int) +(declare-fun p_6_12 () Int) +(declare-fun p_6_13 () Int) +(declare-fun p_6_14 () Int) +(declare-fun p_6_15 () Int) +(declare-fun p_6_16 () Int) +(declare-fun p_6_17 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_7_11 () Int) +(declare-fun p_7_12 () Int) +(declare-fun p_7_13 () Int) +(declare-fun p_7_14 () Int) +(declare-fun p_7_15 () Int) +(declare-fun p_7_16 () Int) +(declare-fun p_7_17 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_8_11 () Int) +(declare-fun p_8_12 () Int) +(declare-fun p_8_13 () Int) +(declare-fun p_8_14 () Int) +(declare-fun p_8_15 () Int) +(declare-fun p_8_16 () Int) +(declare-fun p_8_17 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_9_11 () Int) +(declare-fun p_9_12 () Int) +(declare-fun p_9_13 () Int) +(declare-fun p_9_14 () Int) +(declare-fun p_9_15 () Int) +(declare-fun p_9_16 () Int) +(declare-fun p_9_17 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_10_11 () Int) +(declare-fun p_10_12 () Int) +(declare-fun p_10_13 () Int) +(declare-fun p_10_14 () Int) +(declare-fun p_10_15 () Int) +(declare-fun p_10_16 () Int) +(declare-fun p_10_17 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(declare-fun p_11_11 () Int) +(declare-fun p_11_12 () Int) +(declare-fun p_11_13 () Int) +(declare-fun p_11_14 () Int) +(declare-fun p_11_15 () Int) +(declare-fun p_11_16 () Int) +(declare-fun p_11_17 () Int) +(declare-fun p_12_0 () Int) +(declare-fun p_12_1 () Int) +(declare-fun p_12_2 () Int) +(declare-fun p_12_3 () Int) +(declare-fun p_12_4 () Int) +(declare-fun p_12_5 () Int) +(declare-fun p_12_6 () Int) +(declare-fun p_12_7 () Int) +(declare-fun p_12_8 () Int) +(declare-fun p_12_9 () Int) +(declare-fun p_12_10 () Int) +(declare-fun p_12_11 () Int) +(declare-fun p_12_12 () Int) +(declare-fun p_12_13 () Int) +(declare-fun p_12_14 () Int) +(declare-fun p_12_15 () Int) +(declare-fun p_12_16 () Int) +(declare-fun p_12_17 () Int) +(declare-fun p_13_0 () Int) +(declare-fun p_13_1 () Int) +(declare-fun p_13_2 () Int) +(declare-fun p_13_3 () Int) +(declare-fun p_13_4 () Int) +(declare-fun p_13_5 () Int) +(declare-fun p_13_6 () Int) +(declare-fun p_13_7 () Int) +(declare-fun p_13_8 () Int) +(declare-fun p_13_9 () Int) +(declare-fun p_13_10 () Int) +(declare-fun p_13_11 () Int) +(declare-fun p_13_12 () Int) +(declare-fun p_13_13 () Int) +(declare-fun p_13_14 () Int) +(declare-fun p_13_15 () Int) +(declare-fun p_13_16 () Int) +(declare-fun p_13_17 () Int) +(declare-fun p_14_0 () Int) +(declare-fun p_14_1 () Int) +(declare-fun p_14_2 () Int) +(declare-fun p_14_3 () Int) +(declare-fun p_14_4 () Int) +(declare-fun p_14_5 () Int) +(declare-fun p_14_6 () Int) +(declare-fun p_14_7 () Int) +(declare-fun p_14_8 () Int) +(declare-fun p_14_9 () Int) +(declare-fun p_14_10 () Int) +(declare-fun p_14_11 () Int) +(declare-fun p_14_12 () Int) +(declare-fun p_14_13 () Int) +(declare-fun p_14_14 () Int) +(declare-fun p_14_15 () Int) +(declare-fun p_14_16 () Int) +(declare-fun p_14_17 () Int) +(declare-fun p_15_0 () Int) +(declare-fun p_15_1 () Int) +(declare-fun p_15_2 () Int) +(declare-fun p_15_3 () Int) +(declare-fun p_15_4 () Int) +(declare-fun p_15_5 () Int) +(declare-fun p_15_6 () Int) +(declare-fun p_15_7 () Int) +(declare-fun p_15_8 () Int) +(declare-fun p_15_9 () Int) +(declare-fun p_15_10 () Int) +(declare-fun p_15_11 () Int) +(declare-fun p_15_12 () Int) +(declare-fun p_15_13 () Int) +(declare-fun p_15_14 () Int) +(declare-fun p_15_15 () Int) +(declare-fun p_15_16 () Int) +(declare-fun p_15_17 () Int) +(declare-fun p_16_0 () Int) +(declare-fun p_16_1 () Int) +(declare-fun p_16_2 () Int) +(declare-fun p_16_3 () Int) +(declare-fun p_16_4 () Int) +(declare-fun p_16_5 () Int) +(declare-fun p_16_6 () Int) +(declare-fun p_16_7 () Int) +(declare-fun p_16_8 () Int) +(declare-fun p_16_9 () Int) +(declare-fun p_16_10 () Int) +(declare-fun p_16_11 () Int) +(declare-fun p_16_12 () Int) +(declare-fun p_16_13 () Int) +(declare-fun p_16_14 () Int) +(declare-fun p_16_15 () Int) +(declare-fun p_16_16 () Int) +(declare-fun p_16_17 () Int) +(declare-fun p_17_0 () Int) +(declare-fun p_17_1 () Int) +(declare-fun p_17_2 () Int) +(declare-fun p_17_3 () Int) +(declare-fun p_17_4 () Int) +(declare-fun p_17_5 () Int) +(declare-fun p_17_6 () Int) +(declare-fun p_17_7 () Int) +(declare-fun p_17_8 () Int) +(declare-fun p_17_9 () Int) +(declare-fun p_17_10 () Int) +(declare-fun p_17_11 () Int) +(declare-fun p_17_12 () Int) +(declare-fun p_17_13 () Int) +(declare-fun p_17_14 () Int) +(declare-fun p_17_15 () Int) +(declare-fun p_17_16 () Int) +(declare-fun p_17_17 () Int) +(declare-fun p_18_0 () Int) +(declare-fun p_18_1 () Int) +(declare-fun p_18_2 () Int) +(declare-fun p_18_3 () Int) +(declare-fun p_18_4 () Int) +(declare-fun p_18_5 () Int) +(declare-fun p_18_6 () Int) +(declare-fun p_18_7 () Int) +(declare-fun p_18_8 () Int) +(declare-fun p_18_9 () Int) +(declare-fun p_18_10 () Int) +(declare-fun p_18_11 () Int) +(declare-fun p_18_12 () Int) +(declare-fun p_18_13 () Int) +(declare-fun p_18_14 () Int) +(declare-fun p_18_15 () Int) +(declare-fun p_18_16 () Int) +(declare-fun p_18_17 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_0_11 0)) +(assert (<= p_0_11 1)) +(assert (>= p_0_12 0)) +(assert (<= p_0_12 1)) +(assert (>= p_0_13 0)) +(assert (<= p_0_13 1)) +(assert (>= p_0_14 0)) +(assert (<= p_0_14 1)) +(assert (>= p_0_15 0)) +(assert (<= p_0_15 1)) +(assert (>= p_0_16 0)) +(assert (<= p_0_16 1)) +(assert (>= p_0_17 0)) +(assert (<= p_0_17 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_1_11 0)) +(assert (<= p_1_11 1)) +(assert (>= p_1_12 0)) +(assert (<= p_1_12 1)) +(assert (>= p_1_13 0)) +(assert (<= p_1_13 1)) +(assert (>= p_1_14 0)) +(assert (<= p_1_14 1)) +(assert (>= p_1_15 0)) +(assert (<= p_1_15 1)) +(assert (>= p_1_16 0)) +(assert (<= p_1_16 1)) +(assert (>= p_1_17 0)) +(assert (<= p_1_17 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_2_11 0)) +(assert (<= p_2_11 1)) +(assert (>= p_2_12 0)) +(assert (<= p_2_12 1)) +(assert (>= p_2_13 0)) +(assert (<= p_2_13 1)) +(assert (>= p_2_14 0)) +(assert (<= p_2_14 1)) +(assert (>= p_2_15 0)) +(assert (<= p_2_15 1)) +(assert (>= p_2_16 0)) +(assert (<= p_2_16 1)) +(assert (>= p_2_17 0)) +(assert (<= p_2_17 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_3_11 0)) +(assert (<= p_3_11 1)) +(assert (>= p_3_12 0)) +(assert (<= p_3_12 1)) +(assert (>= p_3_13 0)) +(assert (<= p_3_13 1)) +(assert (>= p_3_14 0)) +(assert (<= p_3_14 1)) +(assert (>= p_3_15 0)) +(assert (<= p_3_15 1)) +(assert (>= p_3_16 0)) +(assert (<= p_3_16 1)) +(assert (>= p_3_17 0)) +(assert (<= p_3_17 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_4_11 0)) +(assert (<= p_4_11 1)) +(assert (>= p_4_12 0)) +(assert (<= p_4_12 1)) +(assert (>= p_4_13 0)) +(assert (<= p_4_13 1)) +(assert (>= p_4_14 0)) +(assert (<= p_4_14 1)) +(assert (>= p_4_15 0)) +(assert (<= p_4_15 1)) +(assert (>= p_4_16 0)) +(assert (<= p_4_16 1)) +(assert (>= p_4_17 0)) +(assert (<= p_4_17 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_5_11 0)) +(assert (<= p_5_11 1)) +(assert (>= p_5_12 0)) +(assert (<= p_5_12 1)) +(assert (>= p_5_13 0)) +(assert (<= p_5_13 1)) +(assert (>= p_5_14 0)) +(assert (<= p_5_14 1)) +(assert (>= p_5_15 0)) +(assert (<= p_5_15 1)) +(assert (>= p_5_16 0)) +(assert (<= p_5_16 1)) +(assert (>= p_5_17 0)) +(assert (<= p_5_17 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_6_11 0)) +(assert (<= p_6_11 1)) +(assert (>= p_6_12 0)) +(assert (<= p_6_12 1)) +(assert (>= p_6_13 0)) +(assert (<= p_6_13 1)) +(assert (>= p_6_14 0)) +(assert (<= p_6_14 1)) +(assert (>= p_6_15 0)) +(assert (<= p_6_15 1)) +(assert (>= p_6_16 0)) +(assert (<= p_6_16 1)) +(assert (>= p_6_17 0)) +(assert (<= p_6_17 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_7_11 0)) +(assert (<= p_7_11 1)) +(assert (>= p_7_12 0)) +(assert (<= p_7_12 1)) +(assert (>= p_7_13 0)) +(assert (<= p_7_13 1)) +(assert (>= p_7_14 0)) +(assert (<= p_7_14 1)) +(assert (>= p_7_15 0)) +(assert (<= p_7_15 1)) +(assert (>= p_7_16 0)) +(assert (<= p_7_16 1)) +(assert (>= p_7_17 0)) +(assert (<= p_7_17 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_8_11 0)) +(assert (<= p_8_11 1)) +(assert (>= p_8_12 0)) +(assert (<= p_8_12 1)) +(assert (>= p_8_13 0)) +(assert (<= p_8_13 1)) +(assert (>= p_8_14 0)) +(assert (<= p_8_14 1)) +(assert (>= p_8_15 0)) +(assert (<= p_8_15 1)) +(assert (>= p_8_16 0)) +(assert (<= p_8_16 1)) +(assert (>= p_8_17 0)) +(assert (<= p_8_17 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_9_11 0)) +(assert (<= p_9_11 1)) +(assert (>= p_9_12 0)) +(assert (<= p_9_12 1)) +(assert (>= p_9_13 0)) +(assert (<= p_9_13 1)) +(assert (>= p_9_14 0)) +(assert (<= p_9_14 1)) +(assert (>= p_9_15 0)) +(assert (<= p_9_15 1)) +(assert (>= p_9_16 0)) +(assert (<= p_9_16 1)) +(assert (>= p_9_17 0)) +(assert (<= p_9_17 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_10_11 0)) +(assert (<= p_10_11 1)) +(assert (>= p_10_12 0)) +(assert (<= p_10_12 1)) +(assert (>= p_10_13 0)) +(assert (<= p_10_13 1)) +(assert (>= p_10_14 0)) +(assert (<= p_10_14 1)) +(assert (>= p_10_15 0)) +(assert (<= p_10_15 1)) +(assert (>= p_10_16 0)) +(assert (<= p_10_16 1)) +(assert (>= p_10_17 0)) +(assert (<= p_10_17 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= p_11_11 0)) +(assert (<= p_11_11 1)) +(assert (>= p_11_12 0)) +(assert (<= p_11_12 1)) +(assert (>= p_11_13 0)) +(assert (<= p_11_13 1)) +(assert (>= p_11_14 0)) +(assert (<= p_11_14 1)) +(assert (>= p_11_15 0)) +(assert (<= p_11_15 1)) +(assert (>= p_11_16 0)) +(assert (<= p_11_16 1)) +(assert (>= p_11_17 0)) +(assert (<= p_11_17 1)) +(assert (>= p_12_0 0)) +(assert (<= p_12_0 1)) +(assert (>= p_12_1 0)) +(assert (<= p_12_1 1)) +(assert (>= p_12_2 0)) +(assert (<= p_12_2 1)) +(assert (>= p_12_3 0)) +(assert (<= p_12_3 1)) +(assert (>= p_12_4 0)) +(assert (<= p_12_4 1)) +(assert (>= p_12_5 0)) +(assert (<= p_12_5 1)) +(assert (>= p_12_6 0)) +(assert (<= p_12_6 1)) +(assert (>= p_12_7 0)) +(assert (<= p_12_7 1)) +(assert (>= p_12_8 0)) +(assert (<= p_12_8 1)) +(assert (>= p_12_9 0)) +(assert (<= p_12_9 1)) +(assert (>= p_12_10 0)) +(assert (<= p_12_10 1)) +(assert (>= p_12_11 0)) +(assert (<= p_12_11 1)) +(assert (>= p_12_12 0)) +(assert (<= p_12_12 1)) +(assert (>= p_12_13 0)) +(assert (<= p_12_13 1)) +(assert (>= p_12_14 0)) +(assert (<= p_12_14 1)) +(assert (>= p_12_15 0)) +(assert (<= p_12_15 1)) +(assert (>= p_12_16 0)) +(assert (<= p_12_16 1)) +(assert (>= p_12_17 0)) +(assert (<= p_12_17 1)) +(assert (>= p_13_0 0)) +(assert (<= p_13_0 1)) +(assert (>= p_13_1 0)) +(assert (<= p_13_1 1)) +(assert (>= p_13_2 0)) +(assert (<= p_13_2 1)) +(assert (>= p_13_3 0)) +(assert (<= p_13_3 1)) +(assert (>= p_13_4 0)) +(assert (<= p_13_4 1)) +(assert (>= p_13_5 0)) +(assert (<= p_13_5 1)) +(assert (>= p_13_6 0)) +(assert (<= p_13_6 1)) +(assert (>= p_13_7 0)) +(assert (<= p_13_7 1)) +(assert (>= p_13_8 0)) +(assert (<= p_13_8 1)) +(assert (>= p_13_9 0)) +(assert (<= p_13_9 1)) +(assert (>= p_13_10 0)) +(assert (<= p_13_10 1)) +(assert (>= p_13_11 0)) +(assert (<= p_13_11 1)) +(assert (>= p_13_12 0)) +(assert (<= p_13_12 1)) +(assert (>= p_13_13 0)) +(assert (<= p_13_13 1)) +(assert (>= p_13_14 0)) +(assert (<= p_13_14 1)) +(assert (>= p_13_15 0)) +(assert (<= p_13_15 1)) +(assert (>= p_13_16 0)) +(assert (<= p_13_16 1)) +(assert (>= p_13_17 0)) +(assert (<= p_13_17 1)) +(assert (>= p_14_0 0)) +(assert (<= p_14_0 1)) +(assert (>= p_14_1 0)) +(assert (<= p_14_1 1)) +(assert (>= p_14_2 0)) +(assert (<= p_14_2 1)) +(assert (>= p_14_3 0)) +(assert (<= p_14_3 1)) +(assert (>= p_14_4 0)) +(assert (<= p_14_4 1)) +(assert (>= p_14_5 0)) +(assert (<= p_14_5 1)) +(assert (>= p_14_6 0)) +(assert (<= p_14_6 1)) +(assert (>= p_14_7 0)) +(assert (<= p_14_7 1)) +(assert (>= p_14_8 0)) +(assert (<= p_14_8 1)) +(assert (>= p_14_9 0)) +(assert (<= p_14_9 1)) +(assert (>= p_14_10 0)) +(assert (<= p_14_10 1)) +(assert (>= p_14_11 0)) +(assert (<= p_14_11 1)) +(assert (>= p_14_12 0)) +(assert (<= p_14_12 1)) +(assert (>= p_14_13 0)) +(assert (<= p_14_13 1)) +(assert (>= p_14_14 0)) +(assert (<= p_14_14 1)) +(assert (>= p_14_15 0)) +(assert (<= p_14_15 1)) +(assert (>= p_14_16 0)) +(assert (<= p_14_16 1)) +(assert (>= p_14_17 0)) +(assert (<= p_14_17 1)) +(assert (>= p_15_0 0)) +(assert (<= p_15_0 1)) +(assert (>= p_15_1 0)) +(assert (<= p_15_1 1)) +(assert (>= p_15_2 0)) +(assert (<= p_15_2 1)) +(assert (>= p_15_3 0)) +(assert (<= p_15_3 1)) +(assert (>= p_15_4 0)) +(assert (<= p_15_4 1)) +(assert (>= p_15_5 0)) +(assert (<= p_15_5 1)) +(assert (>= p_15_6 0)) +(assert (<= p_15_6 1)) +(assert (>= p_15_7 0)) +(assert (<= p_15_7 1)) +(assert (>= p_15_8 0)) +(assert (<= p_15_8 1)) +(assert (>= p_15_9 0)) +(assert (<= p_15_9 1)) +(assert (>= p_15_10 0)) +(assert (<= p_15_10 1)) +(assert (>= p_15_11 0)) +(assert (<= p_15_11 1)) +(assert (>= p_15_12 0)) +(assert (<= p_15_12 1)) +(assert (>= p_15_13 0)) +(assert (<= p_15_13 1)) +(assert (>= p_15_14 0)) +(assert (<= p_15_14 1)) +(assert (>= p_15_15 0)) +(assert (<= p_15_15 1)) +(assert (>= p_15_16 0)) +(assert (<= p_15_16 1)) +(assert (>= p_15_17 0)) +(assert (<= p_15_17 1)) +(assert (>= p_16_0 0)) +(assert (<= p_16_0 1)) +(assert (>= p_16_1 0)) +(assert (<= p_16_1 1)) +(assert (>= p_16_2 0)) +(assert (<= p_16_2 1)) +(assert (>= p_16_3 0)) +(assert (<= p_16_3 1)) +(assert (>= p_16_4 0)) +(assert (<= p_16_4 1)) +(assert (>= p_16_5 0)) +(assert (<= p_16_5 1)) +(assert (>= p_16_6 0)) +(assert (<= p_16_6 1)) +(assert (>= p_16_7 0)) +(assert (<= p_16_7 1)) +(assert (>= p_16_8 0)) +(assert (<= p_16_8 1)) +(assert (>= p_16_9 0)) +(assert (<= p_16_9 1)) +(assert (>= p_16_10 0)) +(assert (<= p_16_10 1)) +(assert (>= p_16_11 0)) +(assert (<= p_16_11 1)) +(assert (>= p_16_12 0)) +(assert (<= p_16_12 1)) +(assert (>= p_16_13 0)) +(assert (<= p_16_13 1)) +(assert (>= p_16_14 0)) +(assert (<= p_16_14 1)) +(assert (>= p_16_15 0)) +(assert (<= p_16_15 1)) +(assert (>= p_16_16 0)) +(assert (<= p_16_16 1)) +(assert (>= p_16_17 0)) +(assert (<= p_16_17 1)) +(assert (>= p_17_0 0)) +(assert (<= p_17_0 1)) +(assert (>= p_17_1 0)) +(assert (<= p_17_1 1)) +(assert (>= p_17_2 0)) +(assert (<= p_17_2 1)) +(assert (>= p_17_3 0)) +(assert (<= p_17_3 1)) +(assert (>= p_17_4 0)) +(assert (<= p_17_4 1)) +(assert (>= p_17_5 0)) +(assert (<= p_17_5 1)) +(assert (>= p_17_6 0)) +(assert (<= p_17_6 1)) +(assert (>= p_17_7 0)) +(assert (<= p_17_7 1)) +(assert (>= p_17_8 0)) +(assert (<= p_17_8 1)) +(assert (>= p_17_9 0)) +(assert (<= p_17_9 1)) +(assert (>= p_17_10 0)) +(assert (<= p_17_10 1)) +(assert (>= p_17_11 0)) +(assert (<= p_17_11 1)) +(assert (>= p_17_12 0)) +(assert (<= p_17_12 1)) +(assert (>= p_17_13 0)) +(assert (<= p_17_13 1)) +(assert (>= p_17_14 0)) +(assert (<= p_17_14 1)) +(assert (>= p_17_15 0)) +(assert (<= p_17_15 1)) +(assert (>= p_17_16 0)) +(assert (<= p_17_16 1)) +(assert (>= p_17_17 0)) +(assert (<= p_17_17 1)) +(assert (>= p_18_0 0)) +(assert (<= p_18_0 1)) +(assert (>= p_18_1 0)) +(assert (<= p_18_1 1)) +(assert (>= p_18_2 0)) +(assert (<= p_18_2 1)) +(assert (>= p_18_3 0)) +(assert (<= p_18_3 1)) +(assert (>= p_18_4 0)) +(assert (<= p_18_4 1)) +(assert (>= p_18_5 0)) +(assert (<= p_18_5 1)) +(assert (>= p_18_6 0)) +(assert (<= p_18_6 1)) +(assert (>= p_18_7 0)) +(assert (<= p_18_7 1)) +(assert (>= p_18_8 0)) +(assert (<= p_18_8 1)) +(assert (>= p_18_9 0)) +(assert (<= p_18_9 1)) +(assert (>= p_18_10 0)) +(assert (<= p_18_10 1)) +(assert (>= p_18_11 0)) +(assert (<= p_18_11 1)) +(assert (>= p_18_12 0)) +(assert (<= p_18_12 1)) +(assert (>= p_18_13 0)) +(assert (<= p_18_13 1)) +(assert (>= p_18_14 0)) +(assert (<= p_18_14 1)) +(assert (>= p_18_15 0)) +(assert (<= p_18_15 1)) +(assert (>= p_18_16 0)) +(assert (<= p_18_16 1)) +(assert (>= p_18_17 0)) +(assert (<= p_18_17 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10 p_0_11 p_0_12 p_0_13 p_0_14 p_0_15 p_0_16 p_0_17) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10 p_1_11 p_1_12 p_1_13 p_1_14 p_1_15 p_1_16 p_1_17) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10 p_2_11 p_2_12 p_2_13 p_2_14 p_2_15 p_2_16 p_2_17) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10 p_3_11 p_3_12 p_3_13 p_3_14 p_3_15 p_3_16 p_3_17) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10 p_4_11 p_4_12 p_4_13 p_4_14 p_4_15 p_4_16 p_4_17) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10 p_5_11 p_5_12 p_5_13 p_5_14 p_5_15 p_5_16 p_5_17) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10 p_6_11 p_6_12 p_6_13 p_6_14 p_6_15 p_6_16 p_6_17) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10 p_7_11 p_7_12 p_7_13 p_7_14 p_7_15 p_7_16 p_7_17) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10 p_8_11 p_8_12 p_8_13 p_8_14 p_8_15 p_8_16 p_8_17) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10 p_9_11 p_9_12 p_9_13 p_9_14 p_9_15 p_9_16 p_9_17) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10 p_10_11 p_10_12 p_10_13 p_10_14 p_10_15 p_10_16 p_10_17) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10 p_11_11 p_11_12 p_11_13 p_11_14 p_11_15 p_11_16 p_11_17) 1)) +(assert (>= (+ p_12_0 p_12_1 p_12_2 p_12_3 p_12_4 p_12_5 p_12_6 p_12_7 p_12_8 p_12_9 p_12_10 p_12_11 p_12_12 p_12_13 p_12_14 p_12_15 p_12_16 p_12_17) 1)) +(assert (>= (+ p_13_0 p_13_1 p_13_2 p_13_3 p_13_4 p_13_5 p_13_6 p_13_7 p_13_8 p_13_9 p_13_10 p_13_11 p_13_12 p_13_13 p_13_14 p_13_15 p_13_16 p_13_17) 1)) +(assert (>= (+ p_14_0 p_14_1 p_14_2 p_14_3 p_14_4 p_14_5 p_14_6 p_14_7 p_14_8 p_14_9 p_14_10 p_14_11 p_14_12 p_14_13 p_14_14 p_14_15 p_14_16 p_14_17) 1)) +(assert (>= (+ p_15_0 p_15_1 p_15_2 p_15_3 p_15_4 p_15_5 p_15_6 p_15_7 p_15_8 p_15_9 p_15_10 p_15_11 p_15_12 p_15_13 p_15_14 p_15_15 p_15_16 p_15_17) 1)) +(assert (>= (+ p_16_0 p_16_1 p_16_2 p_16_3 p_16_4 p_16_5 p_16_6 p_16_7 p_16_8 p_16_9 p_16_10 p_16_11 p_16_12 p_16_13 p_16_14 p_16_15 p_16_16 p_16_17) 1)) +(assert (>= (+ p_17_0 p_17_1 p_17_2 p_17_3 p_17_4 p_17_5 p_17_6 p_17_7 p_17_8 p_17_9 p_17_10 p_17_11 p_17_12 p_17_13 p_17_14 p_17_15 p_17_16 p_17_17) 1)) +(assert (>= (+ p_18_0 p_18_1 p_18_2 p_18_3 p_18_4 p_18_5 p_18_6 p_18_7 p_18_8 p_18_9 p_18_10 p_18_11 p_18_12 p_18_13 p_18_14 p_18_15 p_18_16 p_18_17) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0 p_12_0 p_13_0 p_14_0 p_15_0 p_16_0 p_17_0 p_18_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1 p_12_1 p_13_1 p_14_1 p_15_1 p_16_1 p_17_1 p_18_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2 p_12_2 p_13_2 p_14_2 p_15_2 p_16_2 p_17_2 p_18_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3 p_12_3 p_13_3 p_14_3 p_15_3 p_16_3 p_17_3 p_18_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4 p_12_4 p_13_4 p_14_4 p_15_4 p_16_4 p_17_4 p_18_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5 p_12_5 p_13_5 p_14_5 p_15_5 p_16_5 p_17_5 p_18_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6 p_12_6 p_13_6 p_14_6 p_15_6 p_16_6 p_17_6 p_18_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7 p_12_7 p_13_7 p_14_7 p_15_7 p_16_7 p_17_7 p_18_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8 p_12_8 p_13_8 p_14_8 p_15_8 p_16_8 p_17_8 p_18_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9 p_12_9 p_13_9 p_14_9 p_15_9 p_16_9 p_17_9 p_18_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10 p_12_10 p_13_10 p_14_10 p_15_10 p_16_10 p_17_10 p_18_10) 1)) +(assert (<= (+ p_0_11 p_1_11 p_2_11 p_3_11 p_4_11 p_5_11 p_6_11 p_7_11 p_8_11 p_9_11 p_10_11 p_11_11 p_12_11 p_13_11 p_14_11 p_15_11 p_16_11 p_17_11 p_18_11) 1)) +(assert (<= (+ p_0_12 p_1_12 p_2_12 p_3_12 p_4_12 p_5_12 p_6_12 p_7_12 p_8_12 p_9_12 p_10_12 p_11_12 p_12_12 p_13_12 p_14_12 p_15_12 p_16_12 p_17_12 p_18_12) 1)) +(assert (<= (+ p_0_13 p_1_13 p_2_13 p_3_13 p_4_13 p_5_13 p_6_13 p_7_13 p_8_13 p_9_13 p_10_13 p_11_13 p_12_13 p_13_13 p_14_13 p_15_13 p_16_13 p_17_13 p_18_13) 1)) +(assert (<= (+ p_0_14 p_1_14 p_2_14 p_3_14 p_4_14 p_5_14 p_6_14 p_7_14 p_8_14 p_9_14 p_10_14 p_11_14 p_12_14 p_13_14 p_14_14 p_15_14 p_16_14 p_17_14 p_18_14) 1)) +(assert (<= (+ p_0_15 p_1_15 p_2_15 p_3_15 p_4_15 p_5_15 p_6_15 p_7_15 p_8_15 p_9_15 p_10_15 p_11_15 p_12_15 p_13_15 p_14_15 p_15_15 p_16_15 p_17_15 p_18_15) 1)) +(assert (<= (+ p_0_16 p_1_16 p_2_16 p_3_16 p_4_16 p_5_16 p_6_16 p_7_16 p_8_16 p_9_16 p_10_16 p_11_16 p_12_16 p_13_16 p_14_16 p_15_16 p_16_16 p_17_16 p_18_16) 1)) +(assert (<= (+ p_0_17 p_1_17 p_2_17 p_3_17 p_4_17 p_5_17 p_6_17 p_7_17 p_8_17 p_9_17 p_10_17 p_11_17 p_12_17 p_13_17 p_14_17 p_15_17 p_16_17 p_17_17 p_18_17) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-19.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-19.smt2 new file mode 100644 index 0000000..d5a84fb --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-19.smt2 @@ -0,0 +1,1185 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_0_11 () Int) +(declare-fun p_0_12 () Int) +(declare-fun p_0_13 () Int) +(declare-fun p_0_14 () Int) +(declare-fun p_0_15 () Int) +(declare-fun p_0_16 () Int) +(declare-fun p_0_17 () Int) +(declare-fun p_0_18 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_1_11 () Int) +(declare-fun p_1_12 () Int) +(declare-fun p_1_13 () Int) +(declare-fun p_1_14 () Int) +(declare-fun p_1_15 () Int) +(declare-fun p_1_16 () Int) +(declare-fun p_1_17 () Int) +(declare-fun p_1_18 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_2_11 () Int) +(declare-fun p_2_12 () Int) +(declare-fun p_2_13 () Int) +(declare-fun p_2_14 () Int) +(declare-fun p_2_15 () Int) +(declare-fun p_2_16 () Int) +(declare-fun p_2_17 () Int) +(declare-fun p_2_18 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_3_11 () Int) +(declare-fun p_3_12 () Int) +(declare-fun p_3_13 () Int) +(declare-fun p_3_14 () Int) +(declare-fun p_3_15 () Int) +(declare-fun p_3_16 () Int) +(declare-fun p_3_17 () Int) +(declare-fun p_3_18 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_4_11 () Int) +(declare-fun p_4_12 () Int) +(declare-fun p_4_13 () Int) +(declare-fun p_4_14 () Int) +(declare-fun p_4_15 () Int) +(declare-fun p_4_16 () Int) +(declare-fun p_4_17 () Int) +(declare-fun p_4_18 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_5_11 () Int) +(declare-fun p_5_12 () Int) +(declare-fun p_5_13 () Int) +(declare-fun p_5_14 () Int) +(declare-fun p_5_15 () Int) +(declare-fun p_5_16 () Int) +(declare-fun p_5_17 () Int) +(declare-fun p_5_18 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_6_11 () Int) +(declare-fun p_6_12 () Int) +(declare-fun p_6_13 () Int) +(declare-fun p_6_14 () Int) +(declare-fun p_6_15 () Int) +(declare-fun p_6_16 () Int) +(declare-fun p_6_17 () Int) +(declare-fun p_6_18 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_7_11 () Int) +(declare-fun p_7_12 () Int) +(declare-fun p_7_13 () Int) +(declare-fun p_7_14 () Int) +(declare-fun p_7_15 () Int) +(declare-fun p_7_16 () Int) +(declare-fun p_7_17 () Int) +(declare-fun p_7_18 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_8_11 () Int) +(declare-fun p_8_12 () Int) +(declare-fun p_8_13 () Int) +(declare-fun p_8_14 () Int) +(declare-fun p_8_15 () Int) +(declare-fun p_8_16 () Int) +(declare-fun p_8_17 () Int) +(declare-fun p_8_18 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_9_11 () Int) +(declare-fun p_9_12 () Int) +(declare-fun p_9_13 () Int) +(declare-fun p_9_14 () Int) +(declare-fun p_9_15 () Int) +(declare-fun p_9_16 () Int) +(declare-fun p_9_17 () Int) +(declare-fun p_9_18 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_10_11 () Int) +(declare-fun p_10_12 () Int) +(declare-fun p_10_13 () Int) +(declare-fun p_10_14 () Int) +(declare-fun p_10_15 () Int) +(declare-fun p_10_16 () Int) +(declare-fun p_10_17 () Int) +(declare-fun p_10_18 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(declare-fun p_11_11 () Int) +(declare-fun p_11_12 () Int) +(declare-fun p_11_13 () Int) +(declare-fun p_11_14 () Int) +(declare-fun p_11_15 () Int) +(declare-fun p_11_16 () Int) +(declare-fun p_11_17 () Int) +(declare-fun p_11_18 () Int) +(declare-fun p_12_0 () Int) +(declare-fun p_12_1 () Int) +(declare-fun p_12_2 () Int) +(declare-fun p_12_3 () Int) +(declare-fun p_12_4 () Int) +(declare-fun p_12_5 () Int) +(declare-fun p_12_6 () Int) +(declare-fun p_12_7 () Int) +(declare-fun p_12_8 () Int) +(declare-fun p_12_9 () Int) +(declare-fun p_12_10 () Int) +(declare-fun p_12_11 () Int) +(declare-fun p_12_12 () Int) +(declare-fun p_12_13 () Int) +(declare-fun p_12_14 () Int) +(declare-fun p_12_15 () Int) +(declare-fun p_12_16 () Int) +(declare-fun p_12_17 () Int) +(declare-fun p_12_18 () Int) +(declare-fun p_13_0 () Int) +(declare-fun p_13_1 () Int) +(declare-fun p_13_2 () Int) +(declare-fun p_13_3 () Int) +(declare-fun p_13_4 () Int) +(declare-fun p_13_5 () Int) +(declare-fun p_13_6 () Int) +(declare-fun p_13_7 () Int) +(declare-fun p_13_8 () Int) +(declare-fun p_13_9 () Int) +(declare-fun p_13_10 () Int) +(declare-fun p_13_11 () Int) +(declare-fun p_13_12 () Int) +(declare-fun p_13_13 () Int) +(declare-fun p_13_14 () Int) +(declare-fun p_13_15 () Int) +(declare-fun p_13_16 () Int) +(declare-fun p_13_17 () Int) +(declare-fun p_13_18 () Int) +(declare-fun p_14_0 () Int) +(declare-fun p_14_1 () Int) +(declare-fun p_14_2 () Int) +(declare-fun p_14_3 () Int) +(declare-fun p_14_4 () Int) +(declare-fun p_14_5 () Int) +(declare-fun p_14_6 () Int) +(declare-fun p_14_7 () Int) +(declare-fun p_14_8 () Int) +(declare-fun p_14_9 () Int) +(declare-fun p_14_10 () Int) +(declare-fun p_14_11 () Int) +(declare-fun p_14_12 () Int) +(declare-fun p_14_13 () Int) +(declare-fun p_14_14 () Int) +(declare-fun p_14_15 () Int) +(declare-fun p_14_16 () Int) +(declare-fun p_14_17 () Int) +(declare-fun p_14_18 () Int) +(declare-fun p_15_0 () Int) +(declare-fun p_15_1 () Int) +(declare-fun p_15_2 () Int) +(declare-fun p_15_3 () Int) +(declare-fun p_15_4 () Int) +(declare-fun p_15_5 () Int) +(declare-fun p_15_6 () Int) +(declare-fun p_15_7 () Int) +(declare-fun p_15_8 () Int) +(declare-fun p_15_9 () Int) +(declare-fun p_15_10 () Int) +(declare-fun p_15_11 () Int) +(declare-fun p_15_12 () Int) +(declare-fun p_15_13 () Int) +(declare-fun p_15_14 () Int) +(declare-fun p_15_15 () Int) +(declare-fun p_15_16 () Int) +(declare-fun p_15_17 () Int) +(declare-fun p_15_18 () Int) +(declare-fun p_16_0 () Int) +(declare-fun p_16_1 () Int) +(declare-fun p_16_2 () Int) +(declare-fun p_16_3 () Int) +(declare-fun p_16_4 () Int) +(declare-fun p_16_5 () Int) +(declare-fun p_16_6 () Int) +(declare-fun p_16_7 () Int) +(declare-fun p_16_8 () Int) +(declare-fun p_16_9 () Int) +(declare-fun p_16_10 () Int) +(declare-fun p_16_11 () Int) +(declare-fun p_16_12 () Int) +(declare-fun p_16_13 () Int) +(declare-fun p_16_14 () Int) +(declare-fun p_16_15 () Int) +(declare-fun p_16_16 () Int) +(declare-fun p_16_17 () Int) +(declare-fun p_16_18 () Int) +(declare-fun p_17_0 () Int) +(declare-fun p_17_1 () Int) +(declare-fun p_17_2 () Int) +(declare-fun p_17_3 () Int) +(declare-fun p_17_4 () Int) +(declare-fun p_17_5 () Int) +(declare-fun p_17_6 () Int) +(declare-fun p_17_7 () Int) +(declare-fun p_17_8 () Int) +(declare-fun p_17_9 () Int) +(declare-fun p_17_10 () Int) +(declare-fun p_17_11 () Int) +(declare-fun p_17_12 () Int) +(declare-fun p_17_13 () Int) +(declare-fun p_17_14 () Int) +(declare-fun p_17_15 () Int) +(declare-fun p_17_16 () Int) +(declare-fun p_17_17 () Int) +(declare-fun p_17_18 () Int) +(declare-fun p_18_0 () Int) +(declare-fun p_18_1 () Int) +(declare-fun p_18_2 () Int) +(declare-fun p_18_3 () Int) +(declare-fun p_18_4 () Int) +(declare-fun p_18_5 () Int) +(declare-fun p_18_6 () Int) +(declare-fun p_18_7 () Int) +(declare-fun p_18_8 () Int) +(declare-fun p_18_9 () Int) +(declare-fun p_18_10 () Int) +(declare-fun p_18_11 () Int) +(declare-fun p_18_12 () Int) +(declare-fun p_18_13 () Int) +(declare-fun p_18_14 () Int) +(declare-fun p_18_15 () Int) +(declare-fun p_18_16 () Int) +(declare-fun p_18_17 () Int) +(declare-fun p_18_18 () Int) +(declare-fun p_19_0 () Int) +(declare-fun p_19_1 () Int) +(declare-fun p_19_2 () Int) +(declare-fun p_19_3 () Int) +(declare-fun p_19_4 () Int) +(declare-fun p_19_5 () Int) +(declare-fun p_19_6 () Int) +(declare-fun p_19_7 () Int) +(declare-fun p_19_8 () Int) +(declare-fun p_19_9 () Int) +(declare-fun p_19_10 () Int) +(declare-fun p_19_11 () Int) +(declare-fun p_19_12 () Int) +(declare-fun p_19_13 () Int) +(declare-fun p_19_14 () Int) +(declare-fun p_19_15 () Int) +(declare-fun p_19_16 () Int) +(declare-fun p_19_17 () Int) +(declare-fun p_19_18 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_0_11 0)) +(assert (<= p_0_11 1)) +(assert (>= p_0_12 0)) +(assert (<= p_0_12 1)) +(assert (>= p_0_13 0)) +(assert (<= p_0_13 1)) +(assert (>= p_0_14 0)) +(assert (<= p_0_14 1)) +(assert (>= p_0_15 0)) +(assert (<= p_0_15 1)) +(assert (>= p_0_16 0)) +(assert (<= p_0_16 1)) +(assert (>= p_0_17 0)) +(assert (<= p_0_17 1)) +(assert (>= p_0_18 0)) +(assert (<= p_0_18 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_1_11 0)) +(assert (<= p_1_11 1)) +(assert (>= p_1_12 0)) +(assert (<= p_1_12 1)) +(assert (>= p_1_13 0)) +(assert (<= p_1_13 1)) +(assert (>= p_1_14 0)) +(assert (<= p_1_14 1)) +(assert (>= p_1_15 0)) +(assert (<= p_1_15 1)) +(assert (>= p_1_16 0)) +(assert (<= p_1_16 1)) +(assert (>= p_1_17 0)) +(assert (<= p_1_17 1)) +(assert (>= p_1_18 0)) +(assert (<= p_1_18 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_2_11 0)) +(assert (<= p_2_11 1)) +(assert (>= p_2_12 0)) +(assert (<= p_2_12 1)) +(assert (>= p_2_13 0)) +(assert (<= p_2_13 1)) +(assert (>= p_2_14 0)) +(assert (<= p_2_14 1)) +(assert (>= p_2_15 0)) +(assert (<= p_2_15 1)) +(assert (>= p_2_16 0)) +(assert (<= p_2_16 1)) +(assert (>= p_2_17 0)) +(assert (<= p_2_17 1)) +(assert (>= p_2_18 0)) +(assert (<= p_2_18 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_3_11 0)) +(assert (<= p_3_11 1)) +(assert (>= p_3_12 0)) +(assert (<= p_3_12 1)) +(assert (>= p_3_13 0)) +(assert (<= p_3_13 1)) +(assert (>= p_3_14 0)) +(assert (<= p_3_14 1)) +(assert (>= p_3_15 0)) +(assert (<= p_3_15 1)) +(assert (>= p_3_16 0)) +(assert (<= p_3_16 1)) +(assert (>= p_3_17 0)) +(assert (<= p_3_17 1)) +(assert (>= p_3_18 0)) +(assert (<= p_3_18 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_4_11 0)) +(assert (<= p_4_11 1)) +(assert (>= p_4_12 0)) +(assert (<= p_4_12 1)) +(assert (>= p_4_13 0)) +(assert (<= p_4_13 1)) +(assert (>= p_4_14 0)) +(assert (<= p_4_14 1)) +(assert (>= p_4_15 0)) +(assert (<= p_4_15 1)) +(assert (>= p_4_16 0)) +(assert (<= p_4_16 1)) +(assert (>= p_4_17 0)) +(assert (<= p_4_17 1)) +(assert (>= p_4_18 0)) +(assert (<= p_4_18 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_5_11 0)) +(assert (<= p_5_11 1)) +(assert (>= p_5_12 0)) +(assert (<= p_5_12 1)) +(assert (>= p_5_13 0)) +(assert (<= p_5_13 1)) +(assert (>= p_5_14 0)) +(assert (<= p_5_14 1)) +(assert (>= p_5_15 0)) +(assert (<= p_5_15 1)) +(assert (>= p_5_16 0)) +(assert (<= p_5_16 1)) +(assert (>= p_5_17 0)) +(assert (<= p_5_17 1)) +(assert (>= p_5_18 0)) +(assert (<= p_5_18 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_6_11 0)) +(assert (<= p_6_11 1)) +(assert (>= p_6_12 0)) +(assert (<= p_6_12 1)) +(assert (>= p_6_13 0)) +(assert (<= p_6_13 1)) +(assert (>= p_6_14 0)) +(assert (<= p_6_14 1)) +(assert (>= p_6_15 0)) +(assert (<= p_6_15 1)) +(assert (>= p_6_16 0)) +(assert (<= p_6_16 1)) +(assert (>= p_6_17 0)) +(assert (<= p_6_17 1)) +(assert (>= p_6_18 0)) +(assert (<= p_6_18 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_7_11 0)) +(assert (<= p_7_11 1)) +(assert (>= p_7_12 0)) +(assert (<= p_7_12 1)) +(assert (>= p_7_13 0)) +(assert (<= p_7_13 1)) +(assert (>= p_7_14 0)) +(assert (<= p_7_14 1)) +(assert (>= p_7_15 0)) +(assert (<= p_7_15 1)) +(assert (>= p_7_16 0)) +(assert (<= p_7_16 1)) +(assert (>= p_7_17 0)) +(assert (<= p_7_17 1)) +(assert (>= p_7_18 0)) +(assert (<= p_7_18 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_8_11 0)) +(assert (<= p_8_11 1)) +(assert (>= p_8_12 0)) +(assert (<= p_8_12 1)) +(assert (>= p_8_13 0)) +(assert (<= p_8_13 1)) +(assert (>= p_8_14 0)) +(assert (<= p_8_14 1)) +(assert (>= p_8_15 0)) +(assert (<= p_8_15 1)) +(assert (>= p_8_16 0)) +(assert (<= p_8_16 1)) +(assert (>= p_8_17 0)) +(assert (<= p_8_17 1)) +(assert (>= p_8_18 0)) +(assert (<= p_8_18 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_9_11 0)) +(assert (<= p_9_11 1)) +(assert (>= p_9_12 0)) +(assert (<= p_9_12 1)) +(assert (>= p_9_13 0)) +(assert (<= p_9_13 1)) +(assert (>= p_9_14 0)) +(assert (<= p_9_14 1)) +(assert (>= p_9_15 0)) +(assert (<= p_9_15 1)) +(assert (>= p_9_16 0)) +(assert (<= p_9_16 1)) +(assert (>= p_9_17 0)) +(assert (<= p_9_17 1)) +(assert (>= p_9_18 0)) +(assert (<= p_9_18 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_10_11 0)) +(assert (<= p_10_11 1)) +(assert (>= p_10_12 0)) +(assert (<= p_10_12 1)) +(assert (>= p_10_13 0)) +(assert (<= p_10_13 1)) +(assert (>= p_10_14 0)) +(assert (<= p_10_14 1)) +(assert (>= p_10_15 0)) +(assert (<= p_10_15 1)) +(assert (>= p_10_16 0)) +(assert (<= p_10_16 1)) +(assert (>= p_10_17 0)) +(assert (<= p_10_17 1)) +(assert (>= p_10_18 0)) +(assert (<= p_10_18 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= p_11_11 0)) +(assert (<= p_11_11 1)) +(assert (>= p_11_12 0)) +(assert (<= p_11_12 1)) +(assert (>= p_11_13 0)) +(assert (<= p_11_13 1)) +(assert (>= p_11_14 0)) +(assert (<= p_11_14 1)) +(assert (>= p_11_15 0)) +(assert (<= p_11_15 1)) +(assert (>= p_11_16 0)) +(assert (<= p_11_16 1)) +(assert (>= p_11_17 0)) +(assert (<= p_11_17 1)) +(assert (>= p_11_18 0)) +(assert (<= p_11_18 1)) +(assert (>= p_12_0 0)) +(assert (<= p_12_0 1)) +(assert (>= p_12_1 0)) +(assert (<= p_12_1 1)) +(assert (>= p_12_2 0)) +(assert (<= p_12_2 1)) +(assert (>= p_12_3 0)) +(assert (<= p_12_3 1)) +(assert (>= p_12_4 0)) +(assert (<= p_12_4 1)) +(assert (>= p_12_5 0)) +(assert (<= p_12_5 1)) +(assert (>= p_12_6 0)) +(assert (<= p_12_6 1)) +(assert (>= p_12_7 0)) +(assert (<= p_12_7 1)) +(assert (>= p_12_8 0)) +(assert (<= p_12_8 1)) +(assert (>= p_12_9 0)) +(assert (<= p_12_9 1)) +(assert (>= p_12_10 0)) +(assert (<= p_12_10 1)) +(assert (>= p_12_11 0)) +(assert (<= p_12_11 1)) +(assert (>= p_12_12 0)) +(assert (<= p_12_12 1)) +(assert (>= p_12_13 0)) +(assert (<= p_12_13 1)) +(assert (>= p_12_14 0)) +(assert (<= p_12_14 1)) +(assert (>= p_12_15 0)) +(assert (<= p_12_15 1)) +(assert (>= p_12_16 0)) +(assert (<= p_12_16 1)) +(assert (>= p_12_17 0)) +(assert (<= p_12_17 1)) +(assert (>= p_12_18 0)) +(assert (<= p_12_18 1)) +(assert (>= p_13_0 0)) +(assert (<= p_13_0 1)) +(assert (>= p_13_1 0)) +(assert (<= p_13_1 1)) +(assert (>= p_13_2 0)) +(assert (<= p_13_2 1)) +(assert (>= p_13_3 0)) +(assert (<= p_13_3 1)) +(assert (>= p_13_4 0)) +(assert (<= p_13_4 1)) +(assert (>= p_13_5 0)) +(assert (<= p_13_5 1)) +(assert (>= p_13_6 0)) +(assert (<= p_13_6 1)) +(assert (>= p_13_7 0)) +(assert (<= p_13_7 1)) +(assert (>= p_13_8 0)) +(assert (<= p_13_8 1)) +(assert (>= p_13_9 0)) +(assert (<= p_13_9 1)) +(assert (>= p_13_10 0)) +(assert (<= p_13_10 1)) +(assert (>= p_13_11 0)) +(assert (<= p_13_11 1)) +(assert (>= p_13_12 0)) +(assert (<= p_13_12 1)) +(assert (>= p_13_13 0)) +(assert (<= p_13_13 1)) +(assert (>= p_13_14 0)) +(assert (<= p_13_14 1)) +(assert (>= p_13_15 0)) +(assert (<= p_13_15 1)) +(assert (>= p_13_16 0)) +(assert (<= p_13_16 1)) +(assert (>= p_13_17 0)) +(assert (<= p_13_17 1)) +(assert (>= p_13_18 0)) +(assert (<= p_13_18 1)) +(assert (>= p_14_0 0)) +(assert (<= p_14_0 1)) +(assert (>= p_14_1 0)) +(assert (<= p_14_1 1)) +(assert (>= p_14_2 0)) +(assert (<= p_14_2 1)) +(assert (>= p_14_3 0)) +(assert (<= p_14_3 1)) +(assert (>= p_14_4 0)) +(assert (<= p_14_4 1)) +(assert (>= p_14_5 0)) +(assert (<= p_14_5 1)) +(assert (>= p_14_6 0)) +(assert (<= p_14_6 1)) +(assert (>= p_14_7 0)) +(assert (<= p_14_7 1)) +(assert (>= p_14_8 0)) +(assert (<= p_14_8 1)) +(assert (>= p_14_9 0)) +(assert (<= p_14_9 1)) +(assert (>= p_14_10 0)) +(assert (<= p_14_10 1)) +(assert (>= p_14_11 0)) +(assert (<= p_14_11 1)) +(assert (>= p_14_12 0)) +(assert (<= p_14_12 1)) +(assert (>= p_14_13 0)) +(assert (<= p_14_13 1)) +(assert (>= p_14_14 0)) +(assert (<= p_14_14 1)) +(assert (>= p_14_15 0)) +(assert (<= p_14_15 1)) +(assert (>= p_14_16 0)) +(assert (<= p_14_16 1)) +(assert (>= p_14_17 0)) +(assert (<= p_14_17 1)) +(assert (>= p_14_18 0)) +(assert (<= p_14_18 1)) +(assert (>= p_15_0 0)) +(assert (<= p_15_0 1)) +(assert (>= p_15_1 0)) +(assert (<= p_15_1 1)) +(assert (>= p_15_2 0)) +(assert (<= p_15_2 1)) +(assert (>= p_15_3 0)) +(assert (<= p_15_3 1)) +(assert (>= p_15_4 0)) +(assert (<= p_15_4 1)) +(assert (>= p_15_5 0)) +(assert (<= p_15_5 1)) +(assert (>= p_15_6 0)) +(assert (<= p_15_6 1)) +(assert (>= p_15_7 0)) +(assert (<= p_15_7 1)) +(assert (>= p_15_8 0)) +(assert (<= p_15_8 1)) +(assert (>= p_15_9 0)) +(assert (<= p_15_9 1)) +(assert (>= p_15_10 0)) +(assert (<= p_15_10 1)) +(assert (>= p_15_11 0)) +(assert (<= p_15_11 1)) +(assert (>= p_15_12 0)) +(assert (<= p_15_12 1)) +(assert (>= p_15_13 0)) +(assert (<= p_15_13 1)) +(assert (>= p_15_14 0)) +(assert (<= p_15_14 1)) +(assert (>= p_15_15 0)) +(assert (<= p_15_15 1)) +(assert (>= p_15_16 0)) +(assert (<= p_15_16 1)) +(assert (>= p_15_17 0)) +(assert (<= p_15_17 1)) +(assert (>= p_15_18 0)) +(assert (<= p_15_18 1)) +(assert (>= p_16_0 0)) +(assert (<= p_16_0 1)) +(assert (>= p_16_1 0)) +(assert (<= p_16_1 1)) +(assert (>= p_16_2 0)) +(assert (<= p_16_2 1)) +(assert (>= p_16_3 0)) +(assert (<= p_16_3 1)) +(assert (>= p_16_4 0)) +(assert (<= p_16_4 1)) +(assert (>= p_16_5 0)) +(assert (<= p_16_5 1)) +(assert (>= p_16_6 0)) +(assert (<= p_16_6 1)) +(assert (>= p_16_7 0)) +(assert (<= p_16_7 1)) +(assert (>= p_16_8 0)) +(assert (<= p_16_8 1)) +(assert (>= p_16_9 0)) +(assert (<= p_16_9 1)) +(assert (>= p_16_10 0)) +(assert (<= p_16_10 1)) +(assert (>= p_16_11 0)) +(assert (<= p_16_11 1)) +(assert (>= p_16_12 0)) +(assert (<= p_16_12 1)) +(assert (>= p_16_13 0)) +(assert (<= p_16_13 1)) +(assert (>= p_16_14 0)) +(assert (<= p_16_14 1)) +(assert (>= p_16_15 0)) +(assert (<= p_16_15 1)) +(assert (>= p_16_16 0)) +(assert (<= p_16_16 1)) +(assert (>= p_16_17 0)) +(assert (<= p_16_17 1)) +(assert (>= p_16_18 0)) +(assert (<= p_16_18 1)) +(assert (>= p_17_0 0)) +(assert (<= p_17_0 1)) +(assert (>= p_17_1 0)) +(assert (<= p_17_1 1)) +(assert (>= p_17_2 0)) +(assert (<= p_17_2 1)) +(assert (>= p_17_3 0)) +(assert (<= p_17_3 1)) +(assert (>= p_17_4 0)) +(assert (<= p_17_4 1)) +(assert (>= p_17_5 0)) +(assert (<= p_17_5 1)) +(assert (>= p_17_6 0)) +(assert (<= p_17_6 1)) +(assert (>= p_17_7 0)) +(assert (<= p_17_7 1)) +(assert (>= p_17_8 0)) +(assert (<= p_17_8 1)) +(assert (>= p_17_9 0)) +(assert (<= p_17_9 1)) +(assert (>= p_17_10 0)) +(assert (<= p_17_10 1)) +(assert (>= p_17_11 0)) +(assert (<= p_17_11 1)) +(assert (>= p_17_12 0)) +(assert (<= p_17_12 1)) +(assert (>= p_17_13 0)) +(assert (<= p_17_13 1)) +(assert (>= p_17_14 0)) +(assert (<= p_17_14 1)) +(assert (>= p_17_15 0)) +(assert (<= p_17_15 1)) +(assert (>= p_17_16 0)) +(assert (<= p_17_16 1)) +(assert (>= p_17_17 0)) +(assert (<= p_17_17 1)) +(assert (>= p_17_18 0)) +(assert (<= p_17_18 1)) +(assert (>= p_18_0 0)) +(assert (<= p_18_0 1)) +(assert (>= p_18_1 0)) +(assert (<= p_18_1 1)) +(assert (>= p_18_2 0)) +(assert (<= p_18_2 1)) +(assert (>= p_18_3 0)) +(assert (<= p_18_3 1)) +(assert (>= p_18_4 0)) +(assert (<= p_18_4 1)) +(assert (>= p_18_5 0)) +(assert (<= p_18_5 1)) +(assert (>= p_18_6 0)) +(assert (<= p_18_6 1)) +(assert (>= p_18_7 0)) +(assert (<= p_18_7 1)) +(assert (>= p_18_8 0)) +(assert (<= p_18_8 1)) +(assert (>= p_18_9 0)) +(assert (<= p_18_9 1)) +(assert (>= p_18_10 0)) +(assert (<= p_18_10 1)) +(assert (>= p_18_11 0)) +(assert (<= p_18_11 1)) +(assert (>= p_18_12 0)) +(assert (<= p_18_12 1)) +(assert (>= p_18_13 0)) +(assert (<= p_18_13 1)) +(assert (>= p_18_14 0)) +(assert (<= p_18_14 1)) +(assert (>= p_18_15 0)) +(assert (<= p_18_15 1)) +(assert (>= p_18_16 0)) +(assert (<= p_18_16 1)) +(assert (>= p_18_17 0)) +(assert (<= p_18_17 1)) +(assert (>= p_18_18 0)) +(assert (<= p_18_18 1)) +(assert (>= p_19_0 0)) +(assert (<= p_19_0 1)) +(assert (>= p_19_1 0)) +(assert (<= p_19_1 1)) +(assert (>= p_19_2 0)) +(assert (<= p_19_2 1)) +(assert (>= p_19_3 0)) +(assert (<= p_19_3 1)) +(assert (>= p_19_4 0)) +(assert (<= p_19_4 1)) +(assert (>= p_19_5 0)) +(assert (<= p_19_5 1)) +(assert (>= p_19_6 0)) +(assert (<= p_19_6 1)) +(assert (>= p_19_7 0)) +(assert (<= p_19_7 1)) +(assert (>= p_19_8 0)) +(assert (<= p_19_8 1)) +(assert (>= p_19_9 0)) +(assert (<= p_19_9 1)) +(assert (>= p_19_10 0)) +(assert (<= p_19_10 1)) +(assert (>= p_19_11 0)) +(assert (<= p_19_11 1)) +(assert (>= p_19_12 0)) +(assert (<= p_19_12 1)) +(assert (>= p_19_13 0)) +(assert (<= p_19_13 1)) +(assert (>= p_19_14 0)) +(assert (<= p_19_14 1)) +(assert (>= p_19_15 0)) +(assert (<= p_19_15 1)) +(assert (>= p_19_16 0)) +(assert (<= p_19_16 1)) +(assert (>= p_19_17 0)) +(assert (<= p_19_17 1)) +(assert (>= p_19_18 0)) +(assert (<= p_19_18 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10 p_0_11 p_0_12 p_0_13 p_0_14 p_0_15 p_0_16 p_0_17 p_0_18) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10 p_1_11 p_1_12 p_1_13 p_1_14 p_1_15 p_1_16 p_1_17 p_1_18) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10 p_2_11 p_2_12 p_2_13 p_2_14 p_2_15 p_2_16 p_2_17 p_2_18) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10 p_3_11 p_3_12 p_3_13 p_3_14 p_3_15 p_3_16 p_3_17 p_3_18) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10 p_4_11 p_4_12 p_4_13 p_4_14 p_4_15 p_4_16 p_4_17 p_4_18) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10 p_5_11 p_5_12 p_5_13 p_5_14 p_5_15 p_5_16 p_5_17 p_5_18) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10 p_6_11 p_6_12 p_6_13 p_6_14 p_6_15 p_6_16 p_6_17 p_6_18) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10 p_7_11 p_7_12 p_7_13 p_7_14 p_7_15 p_7_16 p_7_17 p_7_18) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10 p_8_11 p_8_12 p_8_13 p_8_14 p_8_15 p_8_16 p_8_17 p_8_18) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10 p_9_11 p_9_12 p_9_13 p_9_14 p_9_15 p_9_16 p_9_17 p_9_18) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10 p_10_11 p_10_12 p_10_13 p_10_14 p_10_15 p_10_16 p_10_17 p_10_18) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10 p_11_11 p_11_12 p_11_13 p_11_14 p_11_15 p_11_16 p_11_17 p_11_18) 1)) +(assert (>= (+ p_12_0 p_12_1 p_12_2 p_12_3 p_12_4 p_12_5 p_12_6 p_12_7 p_12_8 p_12_9 p_12_10 p_12_11 p_12_12 p_12_13 p_12_14 p_12_15 p_12_16 p_12_17 p_12_18) 1)) +(assert (>= (+ p_13_0 p_13_1 p_13_2 p_13_3 p_13_4 p_13_5 p_13_6 p_13_7 p_13_8 p_13_9 p_13_10 p_13_11 p_13_12 p_13_13 p_13_14 p_13_15 p_13_16 p_13_17 p_13_18) 1)) +(assert (>= (+ p_14_0 p_14_1 p_14_2 p_14_3 p_14_4 p_14_5 p_14_6 p_14_7 p_14_8 p_14_9 p_14_10 p_14_11 p_14_12 p_14_13 p_14_14 p_14_15 p_14_16 p_14_17 p_14_18) 1)) +(assert (>= (+ p_15_0 p_15_1 p_15_2 p_15_3 p_15_4 p_15_5 p_15_6 p_15_7 p_15_8 p_15_9 p_15_10 p_15_11 p_15_12 p_15_13 p_15_14 p_15_15 p_15_16 p_15_17 p_15_18) 1)) +(assert (>= (+ p_16_0 p_16_1 p_16_2 p_16_3 p_16_4 p_16_5 p_16_6 p_16_7 p_16_8 p_16_9 p_16_10 p_16_11 p_16_12 p_16_13 p_16_14 p_16_15 p_16_16 p_16_17 p_16_18) 1)) +(assert (>= (+ p_17_0 p_17_1 p_17_2 p_17_3 p_17_4 p_17_5 p_17_6 p_17_7 p_17_8 p_17_9 p_17_10 p_17_11 p_17_12 p_17_13 p_17_14 p_17_15 p_17_16 p_17_17 p_17_18) 1)) +(assert (>= (+ p_18_0 p_18_1 p_18_2 p_18_3 p_18_4 p_18_5 p_18_6 p_18_7 p_18_8 p_18_9 p_18_10 p_18_11 p_18_12 p_18_13 p_18_14 p_18_15 p_18_16 p_18_17 p_18_18) 1)) +(assert (>= (+ p_19_0 p_19_1 p_19_2 p_19_3 p_19_4 p_19_5 p_19_6 p_19_7 p_19_8 p_19_9 p_19_10 p_19_11 p_19_12 p_19_13 p_19_14 p_19_15 p_19_16 p_19_17 p_19_18) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0 p_12_0 p_13_0 p_14_0 p_15_0 p_16_0 p_17_0 p_18_0 p_19_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1 p_12_1 p_13_1 p_14_1 p_15_1 p_16_1 p_17_1 p_18_1 p_19_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2 p_12_2 p_13_2 p_14_2 p_15_2 p_16_2 p_17_2 p_18_2 p_19_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3 p_12_3 p_13_3 p_14_3 p_15_3 p_16_3 p_17_3 p_18_3 p_19_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4 p_12_4 p_13_4 p_14_4 p_15_4 p_16_4 p_17_4 p_18_4 p_19_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5 p_12_5 p_13_5 p_14_5 p_15_5 p_16_5 p_17_5 p_18_5 p_19_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6 p_12_6 p_13_6 p_14_6 p_15_6 p_16_6 p_17_6 p_18_6 p_19_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7 p_12_7 p_13_7 p_14_7 p_15_7 p_16_7 p_17_7 p_18_7 p_19_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8 p_12_8 p_13_8 p_14_8 p_15_8 p_16_8 p_17_8 p_18_8 p_19_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9 p_12_9 p_13_9 p_14_9 p_15_9 p_16_9 p_17_9 p_18_9 p_19_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10 p_12_10 p_13_10 p_14_10 p_15_10 p_16_10 p_17_10 p_18_10 p_19_10) 1)) +(assert (<= (+ p_0_11 p_1_11 p_2_11 p_3_11 p_4_11 p_5_11 p_6_11 p_7_11 p_8_11 p_9_11 p_10_11 p_11_11 p_12_11 p_13_11 p_14_11 p_15_11 p_16_11 p_17_11 p_18_11 p_19_11) 1)) +(assert (<= (+ p_0_12 p_1_12 p_2_12 p_3_12 p_4_12 p_5_12 p_6_12 p_7_12 p_8_12 p_9_12 p_10_12 p_11_12 p_12_12 p_13_12 p_14_12 p_15_12 p_16_12 p_17_12 p_18_12 p_19_12) 1)) +(assert (<= (+ p_0_13 p_1_13 p_2_13 p_3_13 p_4_13 p_5_13 p_6_13 p_7_13 p_8_13 p_9_13 p_10_13 p_11_13 p_12_13 p_13_13 p_14_13 p_15_13 p_16_13 p_17_13 p_18_13 p_19_13) 1)) +(assert (<= (+ p_0_14 p_1_14 p_2_14 p_3_14 p_4_14 p_5_14 p_6_14 p_7_14 p_8_14 p_9_14 p_10_14 p_11_14 p_12_14 p_13_14 p_14_14 p_15_14 p_16_14 p_17_14 p_18_14 p_19_14) 1)) +(assert (<= (+ p_0_15 p_1_15 p_2_15 p_3_15 p_4_15 p_5_15 p_6_15 p_7_15 p_8_15 p_9_15 p_10_15 p_11_15 p_12_15 p_13_15 p_14_15 p_15_15 p_16_15 p_17_15 p_18_15 p_19_15) 1)) +(assert (<= (+ p_0_16 p_1_16 p_2_16 p_3_16 p_4_16 p_5_16 p_6_16 p_7_16 p_8_16 p_9_16 p_10_16 p_11_16 p_12_16 p_13_16 p_14_16 p_15_16 p_16_16 p_17_16 p_18_16 p_19_16) 1)) +(assert (<= (+ p_0_17 p_1_17 p_2_17 p_3_17 p_4_17 p_5_17 p_6_17 p_7_17 p_8_17 p_9_17 p_10_17 p_11_17 p_12_17 p_13_17 p_14_17 p_15_17 p_16_17 p_17_17 p_18_17 p_19_17) 1)) +(assert (<= (+ p_0_18 p_1_18 p_2_18 p_3_18 p_4_18 p_5_18 p_6_18 p_7_18 p_8_18 p_9_18 p_10_18 p_11_18 p_12_18 p_13_18 p_14_18 p_15_18 p_16_18 p_17_18 p_18_18 p_19_18) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-2.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-2.smt2 new file mode 100644 index 0000000..42121b0 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-2.smt2 @@ -0,0 +1,29 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= (+ p_0_0 p_0_1) 1)) +(assert (>= (+ p_1_0 p_1_1) 1)) +(assert (>= (+ p_2_0 p_2_1) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-20.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-20.smt2 new file mode 100644 index 0000000..7d7e44f --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-20.smt2 @@ -0,0 +1,1307 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_0_9 () Int) +(declare-fun p_0_10 () Int) +(declare-fun p_0_11 () Int) +(declare-fun p_0_12 () Int) +(declare-fun p_0_13 () Int) +(declare-fun p_0_14 () Int) +(declare-fun p_0_15 () Int) +(declare-fun p_0_16 () Int) +(declare-fun p_0_17 () Int) +(declare-fun p_0_18 () Int) +(declare-fun p_0_19 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_1_9 () Int) +(declare-fun p_1_10 () Int) +(declare-fun p_1_11 () Int) +(declare-fun p_1_12 () Int) +(declare-fun p_1_13 () Int) +(declare-fun p_1_14 () Int) +(declare-fun p_1_15 () Int) +(declare-fun p_1_16 () Int) +(declare-fun p_1_17 () Int) +(declare-fun p_1_18 () Int) +(declare-fun p_1_19 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_2_9 () Int) +(declare-fun p_2_10 () Int) +(declare-fun p_2_11 () Int) +(declare-fun p_2_12 () Int) +(declare-fun p_2_13 () Int) +(declare-fun p_2_14 () Int) +(declare-fun p_2_15 () Int) +(declare-fun p_2_16 () Int) +(declare-fun p_2_17 () Int) +(declare-fun p_2_18 () Int) +(declare-fun p_2_19 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_3_9 () Int) +(declare-fun p_3_10 () Int) +(declare-fun p_3_11 () Int) +(declare-fun p_3_12 () Int) +(declare-fun p_3_13 () Int) +(declare-fun p_3_14 () Int) +(declare-fun p_3_15 () Int) +(declare-fun p_3_16 () Int) +(declare-fun p_3_17 () Int) +(declare-fun p_3_18 () Int) +(declare-fun p_3_19 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_4_9 () Int) +(declare-fun p_4_10 () Int) +(declare-fun p_4_11 () Int) +(declare-fun p_4_12 () Int) +(declare-fun p_4_13 () Int) +(declare-fun p_4_14 () Int) +(declare-fun p_4_15 () Int) +(declare-fun p_4_16 () Int) +(declare-fun p_4_17 () Int) +(declare-fun p_4_18 () Int) +(declare-fun p_4_19 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_5_9 () Int) +(declare-fun p_5_10 () Int) +(declare-fun p_5_11 () Int) +(declare-fun p_5_12 () Int) +(declare-fun p_5_13 () Int) +(declare-fun p_5_14 () Int) +(declare-fun p_5_15 () Int) +(declare-fun p_5_16 () Int) +(declare-fun p_5_17 () Int) +(declare-fun p_5_18 () Int) +(declare-fun p_5_19 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_6_9 () Int) +(declare-fun p_6_10 () Int) +(declare-fun p_6_11 () Int) +(declare-fun p_6_12 () Int) +(declare-fun p_6_13 () Int) +(declare-fun p_6_14 () Int) +(declare-fun p_6_15 () Int) +(declare-fun p_6_16 () Int) +(declare-fun p_6_17 () Int) +(declare-fun p_6_18 () Int) +(declare-fun p_6_19 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_7_9 () Int) +(declare-fun p_7_10 () Int) +(declare-fun p_7_11 () Int) +(declare-fun p_7_12 () Int) +(declare-fun p_7_13 () Int) +(declare-fun p_7_14 () Int) +(declare-fun p_7_15 () Int) +(declare-fun p_7_16 () Int) +(declare-fun p_7_17 () Int) +(declare-fun p_7_18 () Int) +(declare-fun p_7_19 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_8_9 () Int) +(declare-fun p_8_10 () Int) +(declare-fun p_8_11 () Int) +(declare-fun p_8_12 () Int) +(declare-fun p_8_13 () Int) +(declare-fun p_8_14 () Int) +(declare-fun p_8_15 () Int) +(declare-fun p_8_16 () Int) +(declare-fun p_8_17 () Int) +(declare-fun p_8_18 () Int) +(declare-fun p_8_19 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(declare-fun p_9_9 () Int) +(declare-fun p_9_10 () Int) +(declare-fun p_9_11 () Int) +(declare-fun p_9_12 () Int) +(declare-fun p_9_13 () Int) +(declare-fun p_9_14 () Int) +(declare-fun p_9_15 () Int) +(declare-fun p_9_16 () Int) +(declare-fun p_9_17 () Int) +(declare-fun p_9_18 () Int) +(declare-fun p_9_19 () Int) +(declare-fun p_10_0 () Int) +(declare-fun p_10_1 () Int) +(declare-fun p_10_2 () Int) +(declare-fun p_10_3 () Int) +(declare-fun p_10_4 () Int) +(declare-fun p_10_5 () Int) +(declare-fun p_10_6 () Int) +(declare-fun p_10_7 () Int) +(declare-fun p_10_8 () Int) +(declare-fun p_10_9 () Int) +(declare-fun p_10_10 () Int) +(declare-fun p_10_11 () Int) +(declare-fun p_10_12 () Int) +(declare-fun p_10_13 () Int) +(declare-fun p_10_14 () Int) +(declare-fun p_10_15 () Int) +(declare-fun p_10_16 () Int) +(declare-fun p_10_17 () Int) +(declare-fun p_10_18 () Int) +(declare-fun p_10_19 () Int) +(declare-fun p_11_0 () Int) +(declare-fun p_11_1 () Int) +(declare-fun p_11_2 () Int) +(declare-fun p_11_3 () Int) +(declare-fun p_11_4 () Int) +(declare-fun p_11_5 () Int) +(declare-fun p_11_6 () Int) +(declare-fun p_11_7 () Int) +(declare-fun p_11_8 () Int) +(declare-fun p_11_9 () Int) +(declare-fun p_11_10 () Int) +(declare-fun p_11_11 () Int) +(declare-fun p_11_12 () Int) +(declare-fun p_11_13 () Int) +(declare-fun p_11_14 () Int) +(declare-fun p_11_15 () Int) +(declare-fun p_11_16 () Int) +(declare-fun p_11_17 () Int) +(declare-fun p_11_18 () Int) +(declare-fun p_11_19 () Int) +(declare-fun p_12_0 () Int) +(declare-fun p_12_1 () Int) +(declare-fun p_12_2 () Int) +(declare-fun p_12_3 () Int) +(declare-fun p_12_4 () Int) +(declare-fun p_12_5 () Int) +(declare-fun p_12_6 () Int) +(declare-fun p_12_7 () Int) +(declare-fun p_12_8 () Int) +(declare-fun p_12_9 () Int) +(declare-fun p_12_10 () Int) +(declare-fun p_12_11 () Int) +(declare-fun p_12_12 () Int) +(declare-fun p_12_13 () Int) +(declare-fun p_12_14 () Int) +(declare-fun p_12_15 () Int) +(declare-fun p_12_16 () Int) +(declare-fun p_12_17 () Int) +(declare-fun p_12_18 () Int) +(declare-fun p_12_19 () Int) +(declare-fun p_13_0 () Int) +(declare-fun p_13_1 () Int) +(declare-fun p_13_2 () Int) +(declare-fun p_13_3 () Int) +(declare-fun p_13_4 () Int) +(declare-fun p_13_5 () Int) +(declare-fun p_13_6 () Int) +(declare-fun p_13_7 () Int) +(declare-fun p_13_8 () Int) +(declare-fun p_13_9 () Int) +(declare-fun p_13_10 () Int) +(declare-fun p_13_11 () Int) +(declare-fun p_13_12 () Int) +(declare-fun p_13_13 () Int) +(declare-fun p_13_14 () Int) +(declare-fun p_13_15 () Int) +(declare-fun p_13_16 () Int) +(declare-fun p_13_17 () Int) +(declare-fun p_13_18 () Int) +(declare-fun p_13_19 () Int) +(declare-fun p_14_0 () Int) +(declare-fun p_14_1 () Int) +(declare-fun p_14_2 () Int) +(declare-fun p_14_3 () Int) +(declare-fun p_14_4 () Int) +(declare-fun p_14_5 () Int) +(declare-fun p_14_6 () Int) +(declare-fun p_14_7 () Int) +(declare-fun p_14_8 () Int) +(declare-fun p_14_9 () Int) +(declare-fun p_14_10 () Int) +(declare-fun p_14_11 () Int) +(declare-fun p_14_12 () Int) +(declare-fun p_14_13 () Int) +(declare-fun p_14_14 () Int) +(declare-fun p_14_15 () Int) +(declare-fun p_14_16 () Int) +(declare-fun p_14_17 () Int) +(declare-fun p_14_18 () Int) +(declare-fun p_14_19 () Int) +(declare-fun p_15_0 () Int) +(declare-fun p_15_1 () Int) +(declare-fun p_15_2 () Int) +(declare-fun p_15_3 () Int) +(declare-fun p_15_4 () Int) +(declare-fun p_15_5 () Int) +(declare-fun p_15_6 () Int) +(declare-fun p_15_7 () Int) +(declare-fun p_15_8 () Int) +(declare-fun p_15_9 () Int) +(declare-fun p_15_10 () Int) +(declare-fun p_15_11 () Int) +(declare-fun p_15_12 () Int) +(declare-fun p_15_13 () Int) +(declare-fun p_15_14 () Int) +(declare-fun p_15_15 () Int) +(declare-fun p_15_16 () Int) +(declare-fun p_15_17 () Int) +(declare-fun p_15_18 () Int) +(declare-fun p_15_19 () Int) +(declare-fun p_16_0 () Int) +(declare-fun p_16_1 () Int) +(declare-fun p_16_2 () Int) +(declare-fun p_16_3 () Int) +(declare-fun p_16_4 () Int) +(declare-fun p_16_5 () Int) +(declare-fun p_16_6 () Int) +(declare-fun p_16_7 () Int) +(declare-fun p_16_8 () Int) +(declare-fun p_16_9 () Int) +(declare-fun p_16_10 () Int) +(declare-fun p_16_11 () Int) +(declare-fun p_16_12 () Int) +(declare-fun p_16_13 () Int) +(declare-fun p_16_14 () Int) +(declare-fun p_16_15 () Int) +(declare-fun p_16_16 () Int) +(declare-fun p_16_17 () Int) +(declare-fun p_16_18 () Int) +(declare-fun p_16_19 () Int) +(declare-fun p_17_0 () Int) +(declare-fun p_17_1 () Int) +(declare-fun p_17_2 () Int) +(declare-fun p_17_3 () Int) +(declare-fun p_17_4 () Int) +(declare-fun p_17_5 () Int) +(declare-fun p_17_6 () Int) +(declare-fun p_17_7 () Int) +(declare-fun p_17_8 () Int) +(declare-fun p_17_9 () Int) +(declare-fun p_17_10 () Int) +(declare-fun p_17_11 () Int) +(declare-fun p_17_12 () Int) +(declare-fun p_17_13 () Int) +(declare-fun p_17_14 () Int) +(declare-fun p_17_15 () Int) +(declare-fun p_17_16 () Int) +(declare-fun p_17_17 () Int) +(declare-fun p_17_18 () Int) +(declare-fun p_17_19 () Int) +(declare-fun p_18_0 () Int) +(declare-fun p_18_1 () Int) +(declare-fun p_18_2 () Int) +(declare-fun p_18_3 () Int) +(declare-fun p_18_4 () Int) +(declare-fun p_18_5 () Int) +(declare-fun p_18_6 () Int) +(declare-fun p_18_7 () Int) +(declare-fun p_18_8 () Int) +(declare-fun p_18_9 () Int) +(declare-fun p_18_10 () Int) +(declare-fun p_18_11 () Int) +(declare-fun p_18_12 () Int) +(declare-fun p_18_13 () Int) +(declare-fun p_18_14 () Int) +(declare-fun p_18_15 () Int) +(declare-fun p_18_16 () Int) +(declare-fun p_18_17 () Int) +(declare-fun p_18_18 () Int) +(declare-fun p_18_19 () Int) +(declare-fun p_19_0 () Int) +(declare-fun p_19_1 () Int) +(declare-fun p_19_2 () Int) +(declare-fun p_19_3 () Int) +(declare-fun p_19_4 () Int) +(declare-fun p_19_5 () Int) +(declare-fun p_19_6 () Int) +(declare-fun p_19_7 () Int) +(declare-fun p_19_8 () Int) +(declare-fun p_19_9 () Int) +(declare-fun p_19_10 () Int) +(declare-fun p_19_11 () Int) +(declare-fun p_19_12 () Int) +(declare-fun p_19_13 () Int) +(declare-fun p_19_14 () Int) +(declare-fun p_19_15 () Int) +(declare-fun p_19_16 () Int) +(declare-fun p_19_17 () Int) +(declare-fun p_19_18 () Int) +(declare-fun p_19_19 () Int) +(declare-fun p_20_0 () Int) +(declare-fun p_20_1 () Int) +(declare-fun p_20_2 () Int) +(declare-fun p_20_3 () Int) +(declare-fun p_20_4 () Int) +(declare-fun p_20_5 () Int) +(declare-fun p_20_6 () Int) +(declare-fun p_20_7 () Int) +(declare-fun p_20_8 () Int) +(declare-fun p_20_9 () Int) +(declare-fun p_20_10 () Int) +(declare-fun p_20_11 () Int) +(declare-fun p_20_12 () Int) +(declare-fun p_20_13 () Int) +(declare-fun p_20_14 () Int) +(declare-fun p_20_15 () Int) +(declare-fun p_20_16 () Int) +(declare-fun p_20_17 () Int) +(declare-fun p_20_18 () Int) +(declare-fun p_20_19 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_0_9 0)) +(assert (<= p_0_9 1)) +(assert (>= p_0_10 0)) +(assert (<= p_0_10 1)) +(assert (>= p_0_11 0)) +(assert (<= p_0_11 1)) +(assert (>= p_0_12 0)) +(assert (<= p_0_12 1)) +(assert (>= p_0_13 0)) +(assert (<= p_0_13 1)) +(assert (>= p_0_14 0)) +(assert (<= p_0_14 1)) +(assert (>= p_0_15 0)) +(assert (<= p_0_15 1)) +(assert (>= p_0_16 0)) +(assert (<= p_0_16 1)) +(assert (>= p_0_17 0)) +(assert (<= p_0_17 1)) +(assert (>= p_0_18 0)) +(assert (<= p_0_18 1)) +(assert (>= p_0_19 0)) +(assert (<= p_0_19 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_1_9 0)) +(assert (<= p_1_9 1)) +(assert (>= p_1_10 0)) +(assert (<= p_1_10 1)) +(assert (>= p_1_11 0)) +(assert (<= p_1_11 1)) +(assert (>= p_1_12 0)) +(assert (<= p_1_12 1)) +(assert (>= p_1_13 0)) +(assert (<= p_1_13 1)) +(assert (>= p_1_14 0)) +(assert (<= p_1_14 1)) +(assert (>= p_1_15 0)) +(assert (<= p_1_15 1)) +(assert (>= p_1_16 0)) +(assert (<= p_1_16 1)) +(assert (>= p_1_17 0)) +(assert (<= p_1_17 1)) +(assert (>= p_1_18 0)) +(assert (<= p_1_18 1)) +(assert (>= p_1_19 0)) +(assert (<= p_1_19 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_2_9 0)) +(assert (<= p_2_9 1)) +(assert (>= p_2_10 0)) +(assert (<= p_2_10 1)) +(assert (>= p_2_11 0)) +(assert (<= p_2_11 1)) +(assert (>= p_2_12 0)) +(assert (<= p_2_12 1)) +(assert (>= p_2_13 0)) +(assert (<= p_2_13 1)) +(assert (>= p_2_14 0)) +(assert (<= p_2_14 1)) +(assert (>= p_2_15 0)) +(assert (<= p_2_15 1)) +(assert (>= p_2_16 0)) +(assert (<= p_2_16 1)) +(assert (>= p_2_17 0)) +(assert (<= p_2_17 1)) +(assert (>= p_2_18 0)) +(assert (<= p_2_18 1)) +(assert (>= p_2_19 0)) +(assert (<= p_2_19 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_3_9 0)) +(assert (<= p_3_9 1)) +(assert (>= p_3_10 0)) +(assert (<= p_3_10 1)) +(assert (>= p_3_11 0)) +(assert (<= p_3_11 1)) +(assert (>= p_3_12 0)) +(assert (<= p_3_12 1)) +(assert (>= p_3_13 0)) +(assert (<= p_3_13 1)) +(assert (>= p_3_14 0)) +(assert (<= p_3_14 1)) +(assert (>= p_3_15 0)) +(assert (<= p_3_15 1)) +(assert (>= p_3_16 0)) +(assert (<= p_3_16 1)) +(assert (>= p_3_17 0)) +(assert (<= p_3_17 1)) +(assert (>= p_3_18 0)) +(assert (<= p_3_18 1)) +(assert (>= p_3_19 0)) +(assert (<= p_3_19 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_4_9 0)) +(assert (<= p_4_9 1)) +(assert (>= p_4_10 0)) +(assert (<= p_4_10 1)) +(assert (>= p_4_11 0)) +(assert (<= p_4_11 1)) +(assert (>= p_4_12 0)) +(assert (<= p_4_12 1)) +(assert (>= p_4_13 0)) +(assert (<= p_4_13 1)) +(assert (>= p_4_14 0)) +(assert (<= p_4_14 1)) +(assert (>= p_4_15 0)) +(assert (<= p_4_15 1)) +(assert (>= p_4_16 0)) +(assert (<= p_4_16 1)) +(assert (>= p_4_17 0)) +(assert (<= p_4_17 1)) +(assert (>= p_4_18 0)) +(assert (<= p_4_18 1)) +(assert (>= p_4_19 0)) +(assert (<= p_4_19 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_5_9 0)) +(assert (<= p_5_9 1)) +(assert (>= p_5_10 0)) +(assert (<= p_5_10 1)) +(assert (>= p_5_11 0)) +(assert (<= p_5_11 1)) +(assert (>= p_5_12 0)) +(assert (<= p_5_12 1)) +(assert (>= p_5_13 0)) +(assert (<= p_5_13 1)) +(assert (>= p_5_14 0)) +(assert (<= p_5_14 1)) +(assert (>= p_5_15 0)) +(assert (<= p_5_15 1)) +(assert (>= p_5_16 0)) +(assert (<= p_5_16 1)) +(assert (>= p_5_17 0)) +(assert (<= p_5_17 1)) +(assert (>= p_5_18 0)) +(assert (<= p_5_18 1)) +(assert (>= p_5_19 0)) +(assert (<= p_5_19 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_6_9 0)) +(assert (<= p_6_9 1)) +(assert (>= p_6_10 0)) +(assert (<= p_6_10 1)) +(assert (>= p_6_11 0)) +(assert (<= p_6_11 1)) +(assert (>= p_6_12 0)) +(assert (<= p_6_12 1)) +(assert (>= p_6_13 0)) +(assert (<= p_6_13 1)) +(assert (>= p_6_14 0)) +(assert (<= p_6_14 1)) +(assert (>= p_6_15 0)) +(assert (<= p_6_15 1)) +(assert (>= p_6_16 0)) +(assert (<= p_6_16 1)) +(assert (>= p_6_17 0)) +(assert (<= p_6_17 1)) +(assert (>= p_6_18 0)) +(assert (<= p_6_18 1)) +(assert (>= p_6_19 0)) +(assert (<= p_6_19 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_7_9 0)) +(assert (<= p_7_9 1)) +(assert (>= p_7_10 0)) +(assert (<= p_7_10 1)) +(assert (>= p_7_11 0)) +(assert (<= p_7_11 1)) +(assert (>= p_7_12 0)) +(assert (<= p_7_12 1)) +(assert (>= p_7_13 0)) +(assert (<= p_7_13 1)) +(assert (>= p_7_14 0)) +(assert (<= p_7_14 1)) +(assert (>= p_7_15 0)) +(assert (<= p_7_15 1)) +(assert (>= p_7_16 0)) +(assert (<= p_7_16 1)) +(assert (>= p_7_17 0)) +(assert (<= p_7_17 1)) +(assert (>= p_7_18 0)) +(assert (<= p_7_18 1)) +(assert (>= p_7_19 0)) +(assert (<= p_7_19 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_8_9 0)) +(assert (<= p_8_9 1)) +(assert (>= p_8_10 0)) +(assert (<= p_8_10 1)) +(assert (>= p_8_11 0)) +(assert (<= p_8_11 1)) +(assert (>= p_8_12 0)) +(assert (<= p_8_12 1)) +(assert (>= p_8_13 0)) +(assert (<= p_8_13 1)) +(assert (>= p_8_14 0)) +(assert (<= p_8_14 1)) +(assert (>= p_8_15 0)) +(assert (<= p_8_15 1)) +(assert (>= p_8_16 0)) +(assert (<= p_8_16 1)) +(assert (>= p_8_17 0)) +(assert (<= p_8_17 1)) +(assert (>= p_8_18 0)) +(assert (<= p_8_18 1)) +(assert (>= p_8_19 0)) +(assert (<= p_8_19 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= p_9_9 0)) +(assert (<= p_9_9 1)) +(assert (>= p_9_10 0)) +(assert (<= p_9_10 1)) +(assert (>= p_9_11 0)) +(assert (<= p_9_11 1)) +(assert (>= p_9_12 0)) +(assert (<= p_9_12 1)) +(assert (>= p_9_13 0)) +(assert (<= p_9_13 1)) +(assert (>= p_9_14 0)) +(assert (<= p_9_14 1)) +(assert (>= p_9_15 0)) +(assert (<= p_9_15 1)) +(assert (>= p_9_16 0)) +(assert (<= p_9_16 1)) +(assert (>= p_9_17 0)) +(assert (<= p_9_17 1)) +(assert (>= p_9_18 0)) +(assert (<= p_9_18 1)) +(assert (>= p_9_19 0)) +(assert (<= p_9_19 1)) +(assert (>= p_10_0 0)) +(assert (<= p_10_0 1)) +(assert (>= p_10_1 0)) +(assert (<= p_10_1 1)) +(assert (>= p_10_2 0)) +(assert (<= p_10_2 1)) +(assert (>= p_10_3 0)) +(assert (<= p_10_3 1)) +(assert (>= p_10_4 0)) +(assert (<= p_10_4 1)) +(assert (>= p_10_5 0)) +(assert (<= p_10_5 1)) +(assert (>= p_10_6 0)) +(assert (<= p_10_6 1)) +(assert (>= p_10_7 0)) +(assert (<= p_10_7 1)) +(assert (>= p_10_8 0)) +(assert (<= p_10_8 1)) +(assert (>= p_10_9 0)) +(assert (<= p_10_9 1)) +(assert (>= p_10_10 0)) +(assert (<= p_10_10 1)) +(assert (>= p_10_11 0)) +(assert (<= p_10_11 1)) +(assert (>= p_10_12 0)) +(assert (<= p_10_12 1)) +(assert (>= p_10_13 0)) +(assert (<= p_10_13 1)) +(assert (>= p_10_14 0)) +(assert (<= p_10_14 1)) +(assert (>= p_10_15 0)) +(assert (<= p_10_15 1)) +(assert (>= p_10_16 0)) +(assert (<= p_10_16 1)) +(assert (>= p_10_17 0)) +(assert (<= p_10_17 1)) +(assert (>= p_10_18 0)) +(assert (<= p_10_18 1)) +(assert (>= p_10_19 0)) +(assert (<= p_10_19 1)) +(assert (>= p_11_0 0)) +(assert (<= p_11_0 1)) +(assert (>= p_11_1 0)) +(assert (<= p_11_1 1)) +(assert (>= p_11_2 0)) +(assert (<= p_11_2 1)) +(assert (>= p_11_3 0)) +(assert (<= p_11_3 1)) +(assert (>= p_11_4 0)) +(assert (<= p_11_4 1)) +(assert (>= p_11_5 0)) +(assert (<= p_11_5 1)) +(assert (>= p_11_6 0)) +(assert (<= p_11_6 1)) +(assert (>= p_11_7 0)) +(assert (<= p_11_7 1)) +(assert (>= p_11_8 0)) +(assert (<= p_11_8 1)) +(assert (>= p_11_9 0)) +(assert (<= p_11_9 1)) +(assert (>= p_11_10 0)) +(assert (<= p_11_10 1)) +(assert (>= p_11_11 0)) +(assert (<= p_11_11 1)) +(assert (>= p_11_12 0)) +(assert (<= p_11_12 1)) +(assert (>= p_11_13 0)) +(assert (<= p_11_13 1)) +(assert (>= p_11_14 0)) +(assert (<= p_11_14 1)) +(assert (>= p_11_15 0)) +(assert (<= p_11_15 1)) +(assert (>= p_11_16 0)) +(assert (<= p_11_16 1)) +(assert (>= p_11_17 0)) +(assert (<= p_11_17 1)) +(assert (>= p_11_18 0)) +(assert (<= p_11_18 1)) +(assert (>= p_11_19 0)) +(assert (<= p_11_19 1)) +(assert (>= p_12_0 0)) +(assert (<= p_12_0 1)) +(assert (>= p_12_1 0)) +(assert (<= p_12_1 1)) +(assert (>= p_12_2 0)) +(assert (<= p_12_2 1)) +(assert (>= p_12_3 0)) +(assert (<= p_12_3 1)) +(assert (>= p_12_4 0)) +(assert (<= p_12_4 1)) +(assert (>= p_12_5 0)) +(assert (<= p_12_5 1)) +(assert (>= p_12_6 0)) +(assert (<= p_12_6 1)) +(assert (>= p_12_7 0)) +(assert (<= p_12_7 1)) +(assert (>= p_12_8 0)) +(assert (<= p_12_8 1)) +(assert (>= p_12_9 0)) +(assert (<= p_12_9 1)) +(assert (>= p_12_10 0)) +(assert (<= p_12_10 1)) +(assert (>= p_12_11 0)) +(assert (<= p_12_11 1)) +(assert (>= p_12_12 0)) +(assert (<= p_12_12 1)) +(assert (>= p_12_13 0)) +(assert (<= p_12_13 1)) +(assert (>= p_12_14 0)) +(assert (<= p_12_14 1)) +(assert (>= p_12_15 0)) +(assert (<= p_12_15 1)) +(assert (>= p_12_16 0)) +(assert (<= p_12_16 1)) +(assert (>= p_12_17 0)) +(assert (<= p_12_17 1)) +(assert (>= p_12_18 0)) +(assert (<= p_12_18 1)) +(assert (>= p_12_19 0)) +(assert (<= p_12_19 1)) +(assert (>= p_13_0 0)) +(assert (<= p_13_0 1)) +(assert (>= p_13_1 0)) +(assert (<= p_13_1 1)) +(assert (>= p_13_2 0)) +(assert (<= p_13_2 1)) +(assert (>= p_13_3 0)) +(assert (<= p_13_3 1)) +(assert (>= p_13_4 0)) +(assert (<= p_13_4 1)) +(assert (>= p_13_5 0)) +(assert (<= p_13_5 1)) +(assert (>= p_13_6 0)) +(assert (<= p_13_6 1)) +(assert (>= p_13_7 0)) +(assert (<= p_13_7 1)) +(assert (>= p_13_8 0)) +(assert (<= p_13_8 1)) +(assert (>= p_13_9 0)) +(assert (<= p_13_9 1)) +(assert (>= p_13_10 0)) +(assert (<= p_13_10 1)) +(assert (>= p_13_11 0)) +(assert (<= p_13_11 1)) +(assert (>= p_13_12 0)) +(assert (<= p_13_12 1)) +(assert (>= p_13_13 0)) +(assert (<= p_13_13 1)) +(assert (>= p_13_14 0)) +(assert (<= p_13_14 1)) +(assert (>= p_13_15 0)) +(assert (<= p_13_15 1)) +(assert (>= p_13_16 0)) +(assert (<= p_13_16 1)) +(assert (>= p_13_17 0)) +(assert (<= p_13_17 1)) +(assert (>= p_13_18 0)) +(assert (<= p_13_18 1)) +(assert (>= p_13_19 0)) +(assert (<= p_13_19 1)) +(assert (>= p_14_0 0)) +(assert (<= p_14_0 1)) +(assert (>= p_14_1 0)) +(assert (<= p_14_1 1)) +(assert (>= p_14_2 0)) +(assert (<= p_14_2 1)) +(assert (>= p_14_3 0)) +(assert (<= p_14_3 1)) +(assert (>= p_14_4 0)) +(assert (<= p_14_4 1)) +(assert (>= p_14_5 0)) +(assert (<= p_14_5 1)) +(assert (>= p_14_6 0)) +(assert (<= p_14_6 1)) +(assert (>= p_14_7 0)) +(assert (<= p_14_7 1)) +(assert (>= p_14_8 0)) +(assert (<= p_14_8 1)) +(assert (>= p_14_9 0)) +(assert (<= p_14_9 1)) +(assert (>= p_14_10 0)) +(assert (<= p_14_10 1)) +(assert (>= p_14_11 0)) +(assert (<= p_14_11 1)) +(assert (>= p_14_12 0)) +(assert (<= p_14_12 1)) +(assert (>= p_14_13 0)) +(assert (<= p_14_13 1)) +(assert (>= p_14_14 0)) +(assert (<= p_14_14 1)) +(assert (>= p_14_15 0)) +(assert (<= p_14_15 1)) +(assert (>= p_14_16 0)) +(assert (<= p_14_16 1)) +(assert (>= p_14_17 0)) +(assert (<= p_14_17 1)) +(assert (>= p_14_18 0)) +(assert (<= p_14_18 1)) +(assert (>= p_14_19 0)) +(assert (<= p_14_19 1)) +(assert (>= p_15_0 0)) +(assert (<= p_15_0 1)) +(assert (>= p_15_1 0)) +(assert (<= p_15_1 1)) +(assert (>= p_15_2 0)) +(assert (<= p_15_2 1)) +(assert (>= p_15_3 0)) +(assert (<= p_15_3 1)) +(assert (>= p_15_4 0)) +(assert (<= p_15_4 1)) +(assert (>= p_15_5 0)) +(assert (<= p_15_5 1)) +(assert (>= p_15_6 0)) +(assert (<= p_15_6 1)) +(assert (>= p_15_7 0)) +(assert (<= p_15_7 1)) +(assert (>= p_15_8 0)) +(assert (<= p_15_8 1)) +(assert (>= p_15_9 0)) +(assert (<= p_15_9 1)) +(assert (>= p_15_10 0)) +(assert (<= p_15_10 1)) +(assert (>= p_15_11 0)) +(assert (<= p_15_11 1)) +(assert (>= p_15_12 0)) +(assert (<= p_15_12 1)) +(assert (>= p_15_13 0)) +(assert (<= p_15_13 1)) +(assert (>= p_15_14 0)) +(assert (<= p_15_14 1)) +(assert (>= p_15_15 0)) +(assert (<= p_15_15 1)) +(assert (>= p_15_16 0)) +(assert (<= p_15_16 1)) +(assert (>= p_15_17 0)) +(assert (<= p_15_17 1)) +(assert (>= p_15_18 0)) +(assert (<= p_15_18 1)) +(assert (>= p_15_19 0)) +(assert (<= p_15_19 1)) +(assert (>= p_16_0 0)) +(assert (<= p_16_0 1)) +(assert (>= p_16_1 0)) +(assert (<= p_16_1 1)) +(assert (>= p_16_2 0)) +(assert (<= p_16_2 1)) +(assert (>= p_16_3 0)) +(assert (<= p_16_3 1)) +(assert (>= p_16_4 0)) +(assert (<= p_16_4 1)) +(assert (>= p_16_5 0)) +(assert (<= p_16_5 1)) +(assert (>= p_16_6 0)) +(assert (<= p_16_6 1)) +(assert (>= p_16_7 0)) +(assert (<= p_16_7 1)) +(assert (>= p_16_8 0)) +(assert (<= p_16_8 1)) +(assert (>= p_16_9 0)) +(assert (<= p_16_9 1)) +(assert (>= p_16_10 0)) +(assert (<= p_16_10 1)) +(assert (>= p_16_11 0)) +(assert (<= p_16_11 1)) +(assert (>= p_16_12 0)) +(assert (<= p_16_12 1)) +(assert (>= p_16_13 0)) +(assert (<= p_16_13 1)) +(assert (>= p_16_14 0)) +(assert (<= p_16_14 1)) +(assert (>= p_16_15 0)) +(assert (<= p_16_15 1)) +(assert (>= p_16_16 0)) +(assert (<= p_16_16 1)) +(assert (>= p_16_17 0)) +(assert (<= p_16_17 1)) +(assert (>= p_16_18 0)) +(assert (<= p_16_18 1)) +(assert (>= p_16_19 0)) +(assert (<= p_16_19 1)) +(assert (>= p_17_0 0)) +(assert (<= p_17_0 1)) +(assert (>= p_17_1 0)) +(assert (<= p_17_1 1)) +(assert (>= p_17_2 0)) +(assert (<= p_17_2 1)) +(assert (>= p_17_3 0)) +(assert (<= p_17_3 1)) +(assert (>= p_17_4 0)) +(assert (<= p_17_4 1)) +(assert (>= p_17_5 0)) +(assert (<= p_17_5 1)) +(assert (>= p_17_6 0)) +(assert (<= p_17_6 1)) +(assert (>= p_17_7 0)) +(assert (<= p_17_7 1)) +(assert (>= p_17_8 0)) +(assert (<= p_17_8 1)) +(assert (>= p_17_9 0)) +(assert (<= p_17_9 1)) +(assert (>= p_17_10 0)) +(assert (<= p_17_10 1)) +(assert (>= p_17_11 0)) +(assert (<= p_17_11 1)) +(assert (>= p_17_12 0)) +(assert (<= p_17_12 1)) +(assert (>= p_17_13 0)) +(assert (<= p_17_13 1)) +(assert (>= p_17_14 0)) +(assert (<= p_17_14 1)) +(assert (>= p_17_15 0)) +(assert (<= p_17_15 1)) +(assert (>= p_17_16 0)) +(assert (<= p_17_16 1)) +(assert (>= p_17_17 0)) +(assert (<= p_17_17 1)) +(assert (>= p_17_18 0)) +(assert (<= p_17_18 1)) +(assert (>= p_17_19 0)) +(assert (<= p_17_19 1)) +(assert (>= p_18_0 0)) +(assert (<= p_18_0 1)) +(assert (>= p_18_1 0)) +(assert (<= p_18_1 1)) +(assert (>= p_18_2 0)) +(assert (<= p_18_2 1)) +(assert (>= p_18_3 0)) +(assert (<= p_18_3 1)) +(assert (>= p_18_4 0)) +(assert (<= p_18_4 1)) +(assert (>= p_18_5 0)) +(assert (<= p_18_5 1)) +(assert (>= p_18_6 0)) +(assert (<= p_18_6 1)) +(assert (>= p_18_7 0)) +(assert (<= p_18_7 1)) +(assert (>= p_18_8 0)) +(assert (<= p_18_8 1)) +(assert (>= p_18_9 0)) +(assert (<= p_18_9 1)) +(assert (>= p_18_10 0)) +(assert (<= p_18_10 1)) +(assert (>= p_18_11 0)) +(assert (<= p_18_11 1)) +(assert (>= p_18_12 0)) +(assert (<= p_18_12 1)) +(assert (>= p_18_13 0)) +(assert (<= p_18_13 1)) +(assert (>= p_18_14 0)) +(assert (<= p_18_14 1)) +(assert (>= p_18_15 0)) +(assert (<= p_18_15 1)) +(assert (>= p_18_16 0)) +(assert (<= p_18_16 1)) +(assert (>= p_18_17 0)) +(assert (<= p_18_17 1)) +(assert (>= p_18_18 0)) +(assert (<= p_18_18 1)) +(assert (>= p_18_19 0)) +(assert (<= p_18_19 1)) +(assert (>= p_19_0 0)) +(assert (<= p_19_0 1)) +(assert (>= p_19_1 0)) +(assert (<= p_19_1 1)) +(assert (>= p_19_2 0)) +(assert (<= p_19_2 1)) +(assert (>= p_19_3 0)) +(assert (<= p_19_3 1)) +(assert (>= p_19_4 0)) +(assert (<= p_19_4 1)) +(assert (>= p_19_5 0)) +(assert (<= p_19_5 1)) +(assert (>= p_19_6 0)) +(assert (<= p_19_6 1)) +(assert (>= p_19_7 0)) +(assert (<= p_19_7 1)) +(assert (>= p_19_8 0)) +(assert (<= p_19_8 1)) +(assert (>= p_19_9 0)) +(assert (<= p_19_9 1)) +(assert (>= p_19_10 0)) +(assert (<= p_19_10 1)) +(assert (>= p_19_11 0)) +(assert (<= p_19_11 1)) +(assert (>= p_19_12 0)) +(assert (<= p_19_12 1)) +(assert (>= p_19_13 0)) +(assert (<= p_19_13 1)) +(assert (>= p_19_14 0)) +(assert (<= p_19_14 1)) +(assert (>= p_19_15 0)) +(assert (<= p_19_15 1)) +(assert (>= p_19_16 0)) +(assert (<= p_19_16 1)) +(assert (>= p_19_17 0)) +(assert (<= p_19_17 1)) +(assert (>= p_19_18 0)) +(assert (<= p_19_18 1)) +(assert (>= p_19_19 0)) +(assert (<= p_19_19 1)) +(assert (>= p_20_0 0)) +(assert (<= p_20_0 1)) +(assert (>= p_20_1 0)) +(assert (<= p_20_1 1)) +(assert (>= p_20_2 0)) +(assert (<= p_20_2 1)) +(assert (>= p_20_3 0)) +(assert (<= p_20_3 1)) +(assert (>= p_20_4 0)) +(assert (<= p_20_4 1)) +(assert (>= p_20_5 0)) +(assert (<= p_20_5 1)) +(assert (>= p_20_6 0)) +(assert (<= p_20_6 1)) +(assert (>= p_20_7 0)) +(assert (<= p_20_7 1)) +(assert (>= p_20_8 0)) +(assert (<= p_20_8 1)) +(assert (>= p_20_9 0)) +(assert (<= p_20_9 1)) +(assert (>= p_20_10 0)) +(assert (<= p_20_10 1)) +(assert (>= p_20_11 0)) +(assert (<= p_20_11 1)) +(assert (>= p_20_12 0)) +(assert (<= p_20_12 1)) +(assert (>= p_20_13 0)) +(assert (<= p_20_13 1)) +(assert (>= p_20_14 0)) +(assert (<= p_20_14 1)) +(assert (>= p_20_15 0)) +(assert (<= p_20_15 1)) +(assert (>= p_20_16 0)) +(assert (<= p_20_16 1)) +(assert (>= p_20_17 0)) +(assert (<= p_20_17 1)) +(assert (>= p_20_18 0)) +(assert (<= p_20_18 1)) +(assert (>= p_20_19 0)) +(assert (<= p_20_19 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8 p_0_9 p_0_10 p_0_11 p_0_12 p_0_13 p_0_14 p_0_15 p_0_16 p_0_17 p_0_18 p_0_19) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8 p_1_9 p_1_10 p_1_11 p_1_12 p_1_13 p_1_14 p_1_15 p_1_16 p_1_17 p_1_18 p_1_19) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8 p_2_9 p_2_10 p_2_11 p_2_12 p_2_13 p_2_14 p_2_15 p_2_16 p_2_17 p_2_18 p_2_19) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8 p_3_9 p_3_10 p_3_11 p_3_12 p_3_13 p_3_14 p_3_15 p_3_16 p_3_17 p_3_18 p_3_19) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8 p_4_9 p_4_10 p_4_11 p_4_12 p_4_13 p_4_14 p_4_15 p_4_16 p_4_17 p_4_18 p_4_19) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8 p_5_9 p_5_10 p_5_11 p_5_12 p_5_13 p_5_14 p_5_15 p_5_16 p_5_17 p_5_18 p_5_19) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8 p_6_9 p_6_10 p_6_11 p_6_12 p_6_13 p_6_14 p_6_15 p_6_16 p_6_17 p_6_18 p_6_19) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8 p_7_9 p_7_10 p_7_11 p_7_12 p_7_13 p_7_14 p_7_15 p_7_16 p_7_17 p_7_18 p_7_19) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8 p_8_9 p_8_10 p_8_11 p_8_12 p_8_13 p_8_14 p_8_15 p_8_16 p_8_17 p_8_18 p_8_19) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8 p_9_9 p_9_10 p_9_11 p_9_12 p_9_13 p_9_14 p_9_15 p_9_16 p_9_17 p_9_18 p_9_19) 1)) +(assert (>= (+ p_10_0 p_10_1 p_10_2 p_10_3 p_10_4 p_10_5 p_10_6 p_10_7 p_10_8 p_10_9 p_10_10 p_10_11 p_10_12 p_10_13 p_10_14 p_10_15 p_10_16 p_10_17 p_10_18 p_10_19) 1)) +(assert (>= (+ p_11_0 p_11_1 p_11_2 p_11_3 p_11_4 p_11_5 p_11_6 p_11_7 p_11_8 p_11_9 p_11_10 p_11_11 p_11_12 p_11_13 p_11_14 p_11_15 p_11_16 p_11_17 p_11_18 p_11_19) 1)) +(assert (>= (+ p_12_0 p_12_1 p_12_2 p_12_3 p_12_4 p_12_5 p_12_6 p_12_7 p_12_8 p_12_9 p_12_10 p_12_11 p_12_12 p_12_13 p_12_14 p_12_15 p_12_16 p_12_17 p_12_18 p_12_19) 1)) +(assert (>= (+ p_13_0 p_13_1 p_13_2 p_13_3 p_13_4 p_13_5 p_13_6 p_13_7 p_13_8 p_13_9 p_13_10 p_13_11 p_13_12 p_13_13 p_13_14 p_13_15 p_13_16 p_13_17 p_13_18 p_13_19) 1)) +(assert (>= (+ p_14_0 p_14_1 p_14_2 p_14_3 p_14_4 p_14_5 p_14_6 p_14_7 p_14_8 p_14_9 p_14_10 p_14_11 p_14_12 p_14_13 p_14_14 p_14_15 p_14_16 p_14_17 p_14_18 p_14_19) 1)) +(assert (>= (+ p_15_0 p_15_1 p_15_2 p_15_3 p_15_4 p_15_5 p_15_6 p_15_7 p_15_8 p_15_9 p_15_10 p_15_11 p_15_12 p_15_13 p_15_14 p_15_15 p_15_16 p_15_17 p_15_18 p_15_19) 1)) +(assert (>= (+ p_16_0 p_16_1 p_16_2 p_16_3 p_16_4 p_16_5 p_16_6 p_16_7 p_16_8 p_16_9 p_16_10 p_16_11 p_16_12 p_16_13 p_16_14 p_16_15 p_16_16 p_16_17 p_16_18 p_16_19) 1)) +(assert (>= (+ p_17_0 p_17_1 p_17_2 p_17_3 p_17_4 p_17_5 p_17_6 p_17_7 p_17_8 p_17_9 p_17_10 p_17_11 p_17_12 p_17_13 p_17_14 p_17_15 p_17_16 p_17_17 p_17_18 p_17_19) 1)) +(assert (>= (+ p_18_0 p_18_1 p_18_2 p_18_3 p_18_4 p_18_5 p_18_6 p_18_7 p_18_8 p_18_9 p_18_10 p_18_11 p_18_12 p_18_13 p_18_14 p_18_15 p_18_16 p_18_17 p_18_18 p_18_19) 1)) +(assert (>= (+ p_19_0 p_19_1 p_19_2 p_19_3 p_19_4 p_19_5 p_19_6 p_19_7 p_19_8 p_19_9 p_19_10 p_19_11 p_19_12 p_19_13 p_19_14 p_19_15 p_19_16 p_19_17 p_19_18 p_19_19) 1)) +(assert (>= (+ p_20_0 p_20_1 p_20_2 p_20_3 p_20_4 p_20_5 p_20_6 p_20_7 p_20_8 p_20_9 p_20_10 p_20_11 p_20_12 p_20_13 p_20_14 p_20_15 p_20_16 p_20_17 p_20_18 p_20_19) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0 p_10_0 p_11_0 p_12_0 p_13_0 p_14_0 p_15_0 p_16_0 p_17_0 p_18_0 p_19_0 p_20_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1 p_10_1 p_11_1 p_12_1 p_13_1 p_14_1 p_15_1 p_16_1 p_17_1 p_18_1 p_19_1 p_20_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2 p_10_2 p_11_2 p_12_2 p_13_2 p_14_2 p_15_2 p_16_2 p_17_2 p_18_2 p_19_2 p_20_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3 p_10_3 p_11_3 p_12_3 p_13_3 p_14_3 p_15_3 p_16_3 p_17_3 p_18_3 p_19_3 p_20_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4 p_10_4 p_11_4 p_12_4 p_13_4 p_14_4 p_15_4 p_16_4 p_17_4 p_18_4 p_19_4 p_20_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5 p_10_5 p_11_5 p_12_5 p_13_5 p_14_5 p_15_5 p_16_5 p_17_5 p_18_5 p_19_5 p_20_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6 p_10_6 p_11_6 p_12_6 p_13_6 p_14_6 p_15_6 p_16_6 p_17_6 p_18_6 p_19_6 p_20_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7 p_10_7 p_11_7 p_12_7 p_13_7 p_14_7 p_15_7 p_16_7 p_17_7 p_18_7 p_19_7 p_20_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8 p_10_8 p_11_8 p_12_8 p_13_8 p_14_8 p_15_8 p_16_8 p_17_8 p_18_8 p_19_8 p_20_8) 1)) +(assert (<= (+ p_0_9 p_1_9 p_2_9 p_3_9 p_4_9 p_5_9 p_6_9 p_7_9 p_8_9 p_9_9 p_10_9 p_11_9 p_12_9 p_13_9 p_14_9 p_15_9 p_16_9 p_17_9 p_18_9 p_19_9 p_20_9) 1)) +(assert (<= (+ p_0_10 p_1_10 p_2_10 p_3_10 p_4_10 p_5_10 p_6_10 p_7_10 p_8_10 p_9_10 p_10_10 p_11_10 p_12_10 p_13_10 p_14_10 p_15_10 p_16_10 p_17_10 p_18_10 p_19_10 p_20_10) 1)) +(assert (<= (+ p_0_11 p_1_11 p_2_11 p_3_11 p_4_11 p_5_11 p_6_11 p_7_11 p_8_11 p_9_11 p_10_11 p_11_11 p_12_11 p_13_11 p_14_11 p_15_11 p_16_11 p_17_11 p_18_11 p_19_11 p_20_11) 1)) +(assert (<= (+ p_0_12 p_1_12 p_2_12 p_3_12 p_4_12 p_5_12 p_6_12 p_7_12 p_8_12 p_9_12 p_10_12 p_11_12 p_12_12 p_13_12 p_14_12 p_15_12 p_16_12 p_17_12 p_18_12 p_19_12 p_20_12) 1)) +(assert (<= (+ p_0_13 p_1_13 p_2_13 p_3_13 p_4_13 p_5_13 p_6_13 p_7_13 p_8_13 p_9_13 p_10_13 p_11_13 p_12_13 p_13_13 p_14_13 p_15_13 p_16_13 p_17_13 p_18_13 p_19_13 p_20_13) 1)) +(assert (<= (+ p_0_14 p_1_14 p_2_14 p_3_14 p_4_14 p_5_14 p_6_14 p_7_14 p_8_14 p_9_14 p_10_14 p_11_14 p_12_14 p_13_14 p_14_14 p_15_14 p_16_14 p_17_14 p_18_14 p_19_14 p_20_14) 1)) +(assert (<= (+ p_0_15 p_1_15 p_2_15 p_3_15 p_4_15 p_5_15 p_6_15 p_7_15 p_8_15 p_9_15 p_10_15 p_11_15 p_12_15 p_13_15 p_14_15 p_15_15 p_16_15 p_17_15 p_18_15 p_19_15 p_20_15) 1)) +(assert (<= (+ p_0_16 p_1_16 p_2_16 p_3_16 p_4_16 p_5_16 p_6_16 p_7_16 p_8_16 p_9_16 p_10_16 p_11_16 p_12_16 p_13_16 p_14_16 p_15_16 p_16_16 p_17_16 p_18_16 p_19_16 p_20_16) 1)) +(assert (<= (+ p_0_17 p_1_17 p_2_17 p_3_17 p_4_17 p_5_17 p_6_17 p_7_17 p_8_17 p_9_17 p_10_17 p_11_17 p_12_17 p_13_17 p_14_17 p_15_17 p_16_17 p_17_17 p_18_17 p_19_17 p_20_17) 1)) +(assert (<= (+ p_0_18 p_1_18 p_2_18 p_3_18 p_4_18 p_5_18 p_6_18 p_7_18 p_8_18 p_9_18 p_10_18 p_11_18 p_12_18 p_13_18 p_14_18 p_15_18 p_16_18 p_17_18 p_18_18 p_19_18 p_20_18) 1)) +(assert (<= (+ p_0_19 p_1_19 p_2_19 p_3_19 p_4_19 p_5_19 p_6_19 p_7_19 p_8_19 p_9_19 p_10_19 p_11_19 p_12_19 p_13_19 p_14_19 p_15_19 p_16_19 p_17_19 p_18_19 p_19_19 p_20_19) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-3.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-3.smt2 new file mode 100644 index 0000000..2f341a7 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-3.smt2 @@ -0,0 +1,49 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-4.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-4.smt2 new file mode 100644 index 0000000..6234faf --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-4.smt2 @@ -0,0 +1,75 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-5.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-5.smt2 new file mode 100644 index 0000000..eacf394 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-5.smt2 @@ -0,0 +1,107 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-6.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-6.smt2 new file mode 100644 index 0000000..a333bc3 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-6.smt2 @@ -0,0 +1,145 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-7.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-7.smt2 new file mode 100644 index 0000000..6222020 --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-7.smt2 @@ -0,0 +1,189 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-8.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-8.smt2 new file mode 100644 index 0000000..577b57c --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-8.smt2 @@ -0,0 +1,239 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-9.smt2 b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-9.smt2 new file mode 100644 index 0000000..5f2decf --- /dev/null +++ b/examples/paper_examples/QF_LIA-master-pidgeons/pidgeons/pigeon-hole-9.smt2 @@ -0,0 +1,295 @@ +(set-info :smt-lib-version 2.6) +(set-logic QF_LIA) +(set-info :category "crafted") +(set-info :status unsat) +(declare-fun p_0_0 () Int) +(declare-fun p_0_1 () Int) +(declare-fun p_0_2 () Int) +(declare-fun p_0_3 () Int) +(declare-fun p_0_4 () Int) +(declare-fun p_0_5 () Int) +(declare-fun p_0_6 () Int) +(declare-fun p_0_7 () Int) +(declare-fun p_0_8 () Int) +(declare-fun p_1_0 () Int) +(declare-fun p_1_1 () Int) +(declare-fun p_1_2 () Int) +(declare-fun p_1_3 () Int) +(declare-fun p_1_4 () Int) +(declare-fun p_1_5 () Int) +(declare-fun p_1_6 () Int) +(declare-fun p_1_7 () Int) +(declare-fun p_1_8 () Int) +(declare-fun p_2_0 () Int) +(declare-fun p_2_1 () Int) +(declare-fun p_2_2 () Int) +(declare-fun p_2_3 () Int) +(declare-fun p_2_4 () Int) +(declare-fun p_2_5 () Int) +(declare-fun p_2_6 () Int) +(declare-fun p_2_7 () Int) +(declare-fun p_2_8 () Int) +(declare-fun p_3_0 () Int) +(declare-fun p_3_1 () Int) +(declare-fun p_3_2 () Int) +(declare-fun p_3_3 () Int) +(declare-fun p_3_4 () Int) +(declare-fun p_3_5 () Int) +(declare-fun p_3_6 () Int) +(declare-fun p_3_7 () Int) +(declare-fun p_3_8 () Int) +(declare-fun p_4_0 () Int) +(declare-fun p_4_1 () Int) +(declare-fun p_4_2 () Int) +(declare-fun p_4_3 () Int) +(declare-fun p_4_4 () Int) +(declare-fun p_4_5 () Int) +(declare-fun p_4_6 () Int) +(declare-fun p_4_7 () Int) +(declare-fun p_4_8 () Int) +(declare-fun p_5_0 () Int) +(declare-fun p_5_1 () Int) +(declare-fun p_5_2 () Int) +(declare-fun p_5_3 () Int) +(declare-fun p_5_4 () Int) +(declare-fun p_5_5 () Int) +(declare-fun p_5_6 () Int) +(declare-fun p_5_7 () Int) +(declare-fun p_5_8 () Int) +(declare-fun p_6_0 () Int) +(declare-fun p_6_1 () Int) +(declare-fun p_6_2 () Int) +(declare-fun p_6_3 () Int) +(declare-fun p_6_4 () Int) +(declare-fun p_6_5 () Int) +(declare-fun p_6_6 () Int) +(declare-fun p_6_7 () Int) +(declare-fun p_6_8 () Int) +(declare-fun p_7_0 () Int) +(declare-fun p_7_1 () Int) +(declare-fun p_7_2 () Int) +(declare-fun p_7_3 () Int) +(declare-fun p_7_4 () Int) +(declare-fun p_7_5 () Int) +(declare-fun p_7_6 () Int) +(declare-fun p_7_7 () Int) +(declare-fun p_7_8 () Int) +(declare-fun p_8_0 () Int) +(declare-fun p_8_1 () Int) +(declare-fun p_8_2 () Int) +(declare-fun p_8_3 () Int) +(declare-fun p_8_4 () Int) +(declare-fun p_8_5 () Int) +(declare-fun p_8_6 () Int) +(declare-fun p_8_7 () Int) +(declare-fun p_8_8 () Int) +(declare-fun p_9_0 () Int) +(declare-fun p_9_1 () Int) +(declare-fun p_9_2 () Int) +(declare-fun p_9_3 () Int) +(declare-fun p_9_4 () Int) +(declare-fun p_9_5 () Int) +(declare-fun p_9_6 () Int) +(declare-fun p_9_7 () Int) +(declare-fun p_9_8 () Int) +(assert (>= p_0_0 0)) +(assert (<= p_0_0 1)) +(assert (>= p_0_1 0)) +(assert (<= p_0_1 1)) +(assert (>= p_0_2 0)) +(assert (<= p_0_2 1)) +(assert (>= p_0_3 0)) +(assert (<= p_0_3 1)) +(assert (>= p_0_4 0)) +(assert (<= p_0_4 1)) +(assert (>= p_0_5 0)) +(assert (<= p_0_5 1)) +(assert (>= p_0_6 0)) +(assert (<= p_0_6 1)) +(assert (>= p_0_7 0)) +(assert (<= p_0_7 1)) +(assert (>= p_0_8 0)) +(assert (<= p_0_8 1)) +(assert (>= p_1_0 0)) +(assert (<= p_1_0 1)) +(assert (>= p_1_1 0)) +(assert (<= p_1_1 1)) +(assert (>= p_1_2 0)) +(assert (<= p_1_2 1)) +(assert (>= p_1_3 0)) +(assert (<= p_1_3 1)) +(assert (>= p_1_4 0)) +(assert (<= p_1_4 1)) +(assert (>= p_1_5 0)) +(assert (<= p_1_5 1)) +(assert (>= p_1_6 0)) +(assert (<= p_1_6 1)) +(assert (>= p_1_7 0)) +(assert (<= p_1_7 1)) +(assert (>= p_1_8 0)) +(assert (<= p_1_8 1)) +(assert (>= p_2_0 0)) +(assert (<= p_2_0 1)) +(assert (>= p_2_1 0)) +(assert (<= p_2_1 1)) +(assert (>= p_2_2 0)) +(assert (<= p_2_2 1)) +(assert (>= p_2_3 0)) +(assert (<= p_2_3 1)) +(assert (>= p_2_4 0)) +(assert (<= p_2_4 1)) +(assert (>= p_2_5 0)) +(assert (<= p_2_5 1)) +(assert (>= p_2_6 0)) +(assert (<= p_2_6 1)) +(assert (>= p_2_7 0)) +(assert (<= p_2_7 1)) +(assert (>= p_2_8 0)) +(assert (<= p_2_8 1)) +(assert (>= p_3_0 0)) +(assert (<= p_3_0 1)) +(assert (>= p_3_1 0)) +(assert (<= p_3_1 1)) +(assert (>= p_3_2 0)) +(assert (<= p_3_2 1)) +(assert (>= p_3_3 0)) +(assert (<= p_3_3 1)) +(assert (>= p_3_4 0)) +(assert (<= p_3_4 1)) +(assert (>= p_3_5 0)) +(assert (<= p_3_5 1)) +(assert (>= p_3_6 0)) +(assert (<= p_3_6 1)) +(assert (>= p_3_7 0)) +(assert (<= p_3_7 1)) +(assert (>= p_3_8 0)) +(assert (<= p_3_8 1)) +(assert (>= p_4_0 0)) +(assert (<= p_4_0 1)) +(assert (>= p_4_1 0)) +(assert (<= p_4_1 1)) +(assert (>= p_4_2 0)) +(assert (<= p_4_2 1)) +(assert (>= p_4_3 0)) +(assert (<= p_4_3 1)) +(assert (>= p_4_4 0)) +(assert (<= p_4_4 1)) +(assert (>= p_4_5 0)) +(assert (<= p_4_5 1)) +(assert (>= p_4_6 0)) +(assert (<= p_4_6 1)) +(assert (>= p_4_7 0)) +(assert (<= p_4_7 1)) +(assert (>= p_4_8 0)) +(assert (<= p_4_8 1)) +(assert (>= p_5_0 0)) +(assert (<= p_5_0 1)) +(assert (>= p_5_1 0)) +(assert (<= p_5_1 1)) +(assert (>= p_5_2 0)) +(assert (<= p_5_2 1)) +(assert (>= p_5_3 0)) +(assert (<= p_5_3 1)) +(assert (>= p_5_4 0)) +(assert (<= p_5_4 1)) +(assert (>= p_5_5 0)) +(assert (<= p_5_5 1)) +(assert (>= p_5_6 0)) +(assert (<= p_5_6 1)) +(assert (>= p_5_7 0)) +(assert (<= p_5_7 1)) +(assert (>= p_5_8 0)) +(assert (<= p_5_8 1)) +(assert (>= p_6_0 0)) +(assert (<= p_6_0 1)) +(assert (>= p_6_1 0)) +(assert (<= p_6_1 1)) +(assert (>= p_6_2 0)) +(assert (<= p_6_2 1)) +(assert (>= p_6_3 0)) +(assert (<= p_6_3 1)) +(assert (>= p_6_4 0)) +(assert (<= p_6_4 1)) +(assert (>= p_6_5 0)) +(assert (<= p_6_5 1)) +(assert (>= p_6_6 0)) +(assert (<= p_6_6 1)) +(assert (>= p_6_7 0)) +(assert (<= p_6_7 1)) +(assert (>= p_6_8 0)) +(assert (<= p_6_8 1)) +(assert (>= p_7_0 0)) +(assert (<= p_7_0 1)) +(assert (>= p_7_1 0)) +(assert (<= p_7_1 1)) +(assert (>= p_7_2 0)) +(assert (<= p_7_2 1)) +(assert (>= p_7_3 0)) +(assert (<= p_7_3 1)) +(assert (>= p_7_4 0)) +(assert (<= p_7_4 1)) +(assert (>= p_7_5 0)) +(assert (<= p_7_5 1)) +(assert (>= p_7_6 0)) +(assert (<= p_7_6 1)) +(assert (>= p_7_7 0)) +(assert (<= p_7_7 1)) +(assert (>= p_7_8 0)) +(assert (<= p_7_8 1)) +(assert (>= p_8_0 0)) +(assert (<= p_8_0 1)) +(assert (>= p_8_1 0)) +(assert (<= p_8_1 1)) +(assert (>= p_8_2 0)) +(assert (<= p_8_2 1)) +(assert (>= p_8_3 0)) +(assert (<= p_8_3 1)) +(assert (>= p_8_4 0)) +(assert (<= p_8_4 1)) +(assert (>= p_8_5 0)) +(assert (<= p_8_5 1)) +(assert (>= p_8_6 0)) +(assert (<= p_8_6 1)) +(assert (>= p_8_7 0)) +(assert (<= p_8_7 1)) +(assert (>= p_8_8 0)) +(assert (<= p_8_8 1)) +(assert (>= p_9_0 0)) +(assert (<= p_9_0 1)) +(assert (>= p_9_1 0)) +(assert (<= p_9_1 1)) +(assert (>= p_9_2 0)) +(assert (<= p_9_2 1)) +(assert (>= p_9_3 0)) +(assert (<= p_9_3 1)) +(assert (>= p_9_4 0)) +(assert (<= p_9_4 1)) +(assert (>= p_9_5 0)) +(assert (<= p_9_5 1)) +(assert (>= p_9_6 0)) +(assert (<= p_9_6 1)) +(assert (>= p_9_7 0)) +(assert (<= p_9_7 1)) +(assert (>= p_9_8 0)) +(assert (<= p_9_8 1)) +(assert (>= (+ p_0_0 p_0_1 p_0_2 p_0_3 p_0_4 p_0_5 p_0_6 p_0_7 p_0_8) 1)) +(assert (>= (+ p_1_0 p_1_1 p_1_2 p_1_3 p_1_4 p_1_5 p_1_6 p_1_7 p_1_8) 1)) +(assert (>= (+ p_2_0 p_2_1 p_2_2 p_2_3 p_2_4 p_2_5 p_2_6 p_2_7 p_2_8) 1)) +(assert (>= (+ p_3_0 p_3_1 p_3_2 p_3_3 p_3_4 p_3_5 p_3_6 p_3_7 p_3_8) 1)) +(assert (>= (+ p_4_0 p_4_1 p_4_2 p_4_3 p_4_4 p_4_5 p_4_6 p_4_7 p_4_8) 1)) +(assert (>= (+ p_5_0 p_5_1 p_5_2 p_5_3 p_5_4 p_5_5 p_5_6 p_5_7 p_5_8) 1)) +(assert (>= (+ p_6_0 p_6_1 p_6_2 p_6_3 p_6_4 p_6_5 p_6_6 p_6_7 p_6_8) 1)) +(assert (>= (+ p_7_0 p_7_1 p_7_2 p_7_3 p_7_4 p_7_5 p_7_6 p_7_7 p_7_8) 1)) +(assert (>= (+ p_8_0 p_8_1 p_8_2 p_8_3 p_8_4 p_8_5 p_8_6 p_8_7 p_8_8) 1)) +(assert (>= (+ p_9_0 p_9_1 p_9_2 p_9_3 p_9_4 p_9_5 p_9_6 p_9_7 p_9_8) 1)) +(assert (<= (+ p_0_0 p_1_0 p_2_0 p_3_0 p_4_0 p_5_0 p_6_0 p_7_0 p_8_0 p_9_0) 1)) +(assert (<= (+ p_0_1 p_1_1 p_2_1 p_3_1 p_4_1 p_5_1 p_6_1 p_7_1 p_8_1 p_9_1) 1)) +(assert (<= (+ p_0_2 p_1_2 p_2_2 p_3_2 p_4_2 p_5_2 p_6_2 p_7_2 p_8_2 p_9_2) 1)) +(assert (<= (+ p_0_3 p_1_3 p_2_3 p_3_3 p_4_3 p_5_3 p_6_3 p_7_3 p_8_3 p_9_3) 1)) +(assert (<= (+ p_0_4 p_1_4 p_2_4 p_3_4 p_4_4 p_5_4 p_6_4 p_7_4 p_8_4 p_9_4) 1)) +(assert (<= (+ p_0_5 p_1_5 p_2_5 p_3_5 p_4_5 p_5_5 p_6_5 p_7_5 p_8_5 p_9_5) 1)) +(assert (<= (+ p_0_6 p_1_6 p_2_6 p_3_6 p_4_6 p_5_6 p_6_6 p_7_6 p_8_6 p_9_6) 1)) +(assert (<= (+ p_0_7 p_1_7 p_2_7 p_3_7 p_4_7 p_5_7 p_6_7 p_7_7 p_8_7 p_9_7) 1)) +(assert (<= (+ p_0_8 p_1_8 p_2_8 p_3_8 p_4_8 p_5_8 p_6_8 p_7_8 p_8_8 p_9_8) 1)) +(check-sat) +(exit) diff --git a/examples/paper_examples/pigeons_benchmark.jl b/examples/paper_examples/pigeons_benchmark.jl new file mode 100644 index 0000000..30fd580 --- /dev/null +++ b/examples/paper_examples/pigeons_benchmark.jl @@ -0,0 +1,163 @@ +# NOTE THAT THIS FILE IS SET UP TO BE RUN FROM examples/paper_examples +push!(LOAD_PATH, "../../src/") +using Satisfiability, BenchmarkTools + +# https://clc-gitlab.cs.uiowa.edu:2443/SMT-LIB-benchmarks/QF_LIA/-/tree/master/pidgeons +# The pigeon-hole benchmarks are Linear Integer Arithmetic benchmarks +# pertaining to fitting pigeons in holes. They are all unsat, because the pigeons do not fit. +# We chose them because the SMT-LIB file, while readable, is very long due to the single-variable syntax of SMT-LIB + +# The following code generates a pigeon-hole benchmark of size n. + +# The assertion pattern is that +#p[1,1] + P[1,2] >= 1 +#p[2,1] + p[2,2] >= 1 +#p[3,1] + p[3,2] >= 1 +#p[1,1] + p[2,1] + p[3,1] <= 1 +#p[1,2] + p[2,2] + p[3,2] <= 1 +# That is, each row p[i,:] >= 1 +# and each column p[:,j] <= 1 + + +function pigeonhole(n::Int) + CLEAR_VARNAMES!() # this clears our "dict" of SMT varnames, which is used to warn about duplicates + + @satvariable(P[1:n+1, 1:n], Int) + each_row = BoolExpr[sum(P[i,:]) >= 1 for i=1:n+1] + each_col = BoolExpr[sum(P[:,j]) <= 1 for j=1:n] + + # Also, P should be in {1,0}. + status = sat!(each_row, each_col, P .>= 0, P .<= 1) + if status != :UNSAT + @error("Something went wrong") + end +end + +function run_with_timing!(cmd::Cmd) + # Why do this? run(cmd, wait=true) throws ERROR on a nonzero exitcode + # but I want to use the exitcode to determine whether z3 completed or timed out. + result = run(cmd, wait=false) + wait(result) + return result.exitcode +end + +# This function generates our own pigeonhole smt files. +# We'll use it in case minor differences in the smt file changes the speed of the solver. +function pigeonhole_smt_files(n::Int) + CLEAR_VARNAMES!() # this clears our "dict" of SMT varnames, which is used to warn about duplicates + + @satvariable(P[1:n+1, 1:n], Int) + each_row = and(BoolExpr[sum(P[i,:]) >= 1 for i=1:n+1]) + each_col = and(BoolExpr[sum(P[:,j]) <= 1 for j=1:n]) + + # Also, P should be in {1,0}. + bounds = and.(P .>= 0, P .<= 1) + open("generated_files/pigeonhole_gen_$n.smt", "w") do outfile + save(each_row, each_col, bounds, io=outfile, start_commands="(set-logic QF_LIA)") + end +end + + +open("pigeons_execution_log_$(time()).txt", "w") do pigeons_execution_log + # Print for reproducibility. + versioninfo(pigeons_execution_log) + + # First we time generating SMT files + #= + # cause precompilation + pigeonhole_smt_files(2) + + write(pigeons_execution_log, "Generating SMT files\nsize,time(seconds)\n") + for n=2:20 + t = @elapsed pigeonhole_smt_files(n) + write(pigeons_execution_log, "$n,$t\n") + end + write(pigeons_execution_log, "Generated SMT files.") + println("Generated SMT files.") + + # First we establish a baseline by timing Z3 as a command line process. + write(pigeons_execution_log, "Solver-on-command-line baseline\nSolver,command,time(seconds),exitcode\n") + + # Preallocate arrays + z3_exitcode = Array{Union{Missing, Int64}}(undef, 20) + fill!(z3_exitcode, missing) + + z3_timing = Array{Union{Missing, Float64}}(undef, 20) + fill!(z3_timing, missing) + + # Cause precompilation + cmd1 = `timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pidgeons/pigeon-hole-2.smt2` + z3_exitcode[1] = run_with_timing!(cmd1) + + for i=2:20 + #cmd = `timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pidgeons/pigeon-hole-$i.smt2` + cmd = `timeout 20m z3 -smt2 generated_files/pigeonhole_gen_$i.smt` + z3_timing[i] = @elapsed z3_exitcode[i] = run_with_timing!(cmd) + write(pigeons_execution_log, "z3,$cmd,$(z3_timing[i]),$(z3_exitcode[i])\n") + println(z3_timing[i], z3_exitcode[i]) + end + =# + + # Now we time Satisfiability.jl! + + # cause precompilation + pigeonhole(2) + + # Assumption: Since Satisfiability.jl cannot possibly make z3 any faster, we only need to time the benchmarks that didn't time out for z3. + # We will take a few samples in the + satjl_timing = Array{Union{Missing, Float64}}(undef, 20) + fill!(satjl_timing, missing) + + # Get some reproducibility information + githash = strip(read(`git show -s --format=%H`, String)) + gitbranch = strip(read(`git rev-parse --abbrev-ref HEAD`, String)) + + write(pigeons_execution_log, "Satisfiability.jl on branch $gitbranch, commit hash $githash\nsize,time(ms)\n") + + nsamples = [10; 10; 10; 10; 10; 10; 5; 5; 5; 5; ones(10)] + for i=2:13 + #if !ismissing(z3_timing[i]) + b = @benchmarkable pigeonhole($i) samples=nsamples[i] + t = run(b) + satjl_timing[i] = mean(t).time*1e-6 # the 1e-6 converts the time to ms + write(pigeons_execution_log, "$i,$(satjl_timing[i])\n") + println(satjl_timing[i]) + # end + end + +end + +# APPENDIX +# Here are some Z3 timing results (missing values indicate timeout). Timeout was 20 minutes or 1200 seconds. This was not a clean execution. +#= +z3_timing_1 = [ + 0.034006866 + 0.055444983 + 0.056520218 + 0.057284805 + 0.060539517 + 0.065195172 + 0.120307282 + 0.298760255 + 6.208515605 + 17.347003256 + 31.094071799 + 197.522055286 + 409.572654804 +] +z3_timing_2 = [ + 0.0314433040 +0.0455733560 +0.0700222710 +0.0562354280 +0.0663802040 +0.075126410 +0.1321614860 +0.6038715180 +3.4534896750 +12.2090679060 +39.0008691730 +176.0400503270 +757.2703937240 +] +=# \ No newline at end of file diff --git a/examples/paper_examples/smt-reader.jl b/examples/paper_examples/smt-reader.jl deleted file mode 100644 index 2333092..0000000 --- a/examples/paper_examples/smt-reader.jl +++ /dev/null @@ -1,43 +0,0 @@ -push!(LOAD_PATH, "../../src/") -push!(LOAD_PATH, "src/") -using Satisfiability -include("../../src/utilities.jl") - -name = "out.smt" -file = readlines(open(name, "r")) # now they are lines -statements = map((a) -> __split_statements(a)[1], file) # now we get rid of the outer parentheses - -# let's sort the lines -decls = filter((l) -> startswith(l, "declare-fun"), statements) -asserts = filter((l) -> startswith(l, "assert"), statements) - -# some hacks to handle only two things -# declare-fun name () Sort -d = Dict{String, AbstractExpr}() - -for decl in decls - tmp = split(decl, " ", limit=4) - varname = String(tmp[2]); type = String(tmp[4]) - - if startswith(varname, "(") # extra parameter, like declare-fun varname (_ BitVec n) - type, extra = split(__split_statements(varname)[1], " ")[2:3] - sz = parse(Int, extra) - eval(:(d[$varname] = Satisfiability.$(Symbol("$(type)Expr"))($varname, $sz))) - else - eval(:(d[$varname] = Satisfiability.$(Symbol("$(type)Expr"))($varname))) - end -end - -op_keys = Dict( - "=" => (==), -) - -function construct_expr(string_expr::String) - op, vars... = split(string_expr, " ") - map((var) -> startswith(var, "(") ? construct_expr(__split_statements(var)[1]) : d[var], vars) - op = op ∈ keys(op_keys) ? op_keys[op] : eval(Symbol(op)) - return op(vars...) -end - -exprs = construct_expr.(asserts) -println(exprs) \ No newline at end of file diff --git a/examples/pigeons_execution_log.txt b/examples/pigeons_execution_log.txt new file mode 100644 index 0000000..00262ba --- /dev/null +++ b/examples/pigeons_execution_log.txt @@ -0,0 +1,32 @@ +Julia Version 1.9.0 +Commit 8e630552924 (2023-05-07 11:25 UTC) +Platform Info: + OS: Linux (x86_64-linux-gnu) + CPU: 8 × Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz + WORD_SIZE: 64 + LIBM: libopenlibm + LLVM: libLLVM-14.0.6 (ORCJIT, skylake) + Threads: 1 on 8 virtual cores +Environment: + JULIA_REVISE = manual +Solver-on-command-line baseline +Solver,command,time(seconds),exitcode +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-2.smt2`,0.003355847,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-3.smt2`,0.007015926,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-4.smt2`,0.005326378,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-5.smt2`,0.008260696,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-6.smt2`,0.006140597,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-7.smt2`,0.004086302,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-8.smt2`,0.005318106,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-9.smt2`,0.006810556,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-10.smt2`,0.005993413,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-11.smt2`,0.004288731,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-12.smt2`,0.004876237,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-13.smt2`,0.007635057,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-14.smt2`,0.007055825,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-15.smt2`,0.008768035,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-16.smt2`,0.007391893,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-17.smt2`,0.006384458,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-18.smt2`,0.008228546,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-19.smt2`,0.006464903,108 +z3,`timeout 20m z3 -smt2 QF_LIA-master-pidgeons/pigeon-hole-20.smt2`,0.009351577,108 diff --git a/examples/schedule_example.jl b/examples/schedule_example.jl index 2f2bc33..2939146 100644 --- a/examples/schedule_example.jl +++ b/examples/schedule_example.jl @@ -38,10 +38,10 @@ conflicts = [filter((i) -> i != j && length(intersect(index_sets[j], index_sets[ no_double_booking = all([M[j,t] ⟹ ¬or(M[conflicts[j],t]) for j=1:J, t=1:T]) # all meetings must be scheduled -require_one_time = all([or(M[j,:]) for j=1:J]) +require_one_time = and(or(M[j,:]) for j=1:J) # nobody should have more than 2 consecutive hours of meetings -time_limit = all([¬and(A[i,t:t+2]) for i=1:n, t=1:T-2]) +time_limit = and(¬and(A[i,t:t+2]) for i=1:n, t=1:T-2) # solve exprs = [no_double_booking, require_one_time, unavailability, time_limit] @@ -50,7 +50,8 @@ status = sat!(exprs, solver=Z3()) println("status = $status") # for this example we know it's SAT times = ["9a", "10a", "11a", "12p", "1p", "2p", "3p", "4p"] for j=1:J - println("Meeting with attendees $(index_sets[j]) can occur at $(times[findall(value(M[j,:]) .== true)])") + Mj_value = value(M[j,:]) + println("Meeting with attendees $(index_sets[j]) can occur at $(times[filter((i) -> Mj_value[i], 1:length(Mj_value))]) .== true)])") end println("Value A: $(value(A))") diff --git a/examples/some_bad_assertions.jl b/examples/some_bad_assertions.jl new file mode 100644 index 0000000..91d735f --- /dev/null +++ b/examples/some_bad_assertions.jl @@ -0,0 +1,59 @@ +push!(LOAD_PATH, "../src") +using Satisfiability + +# In this problem we have some expressions we need to satisfy, and some that we would like to satisfy (but we can't satisfy them all). +# We want to figure out which expressions we can satisfy using push() and pop() to assert and remove them as necessary. + +@satvariable(x, Bool) +@satvariable(y, Bool) +@satvariable(z, Bool) +necessary_exprs = or(and(not(x), y, z), and(not(y), x, z)) + +interactive_solver = open(Z3()) + +# We assert this at the first level, since we always have to have it. +assert!(interactive_solver, necessary_exprs) + +conflicting_exprs = [ + not(z), + and(not(x), not(y)), + not(x), + and(x,y), +] +for e in conflicting_exprs + # Push one assertion level on the stack + push!(interactive_solver, 1) + + # Now assert an expression that might make the problem unsatisfiable + assert!(interactive_solver, e) + status, assignment = sat!(interactive_solver) + + if status == :SAT + println("We found it! Expr \n$e \nis satisfiable.") + assign!(necessary_exprs, assignment) + assign!(conflicting_exprs, assignment) + else + # Pop one level off the stack, removing the problematic assertion. + pop!(interactive_solver, 1) + end +end + +# let's reset the solver so we can try another way to do the same thing. This command clears all assertions, including the first one we made at level 1. +reset_assertions!(interactive_solver) + + +println("Another way to do it.") +assert!(interactive_solver, necessary_exprs) +# Here's an equivalent way to do this by passing exprs into sat!. This is equivalent to the SMT-LIB syntax "(check-sat-assuming (exprs...))", which does not (assert) the expressions but assumes they should be satisfied. +for e in conflicting_exprs + status, assignment = sat!(interactive_solver, e) + println("status = $status") + if status == :SAT + println("We found it! Expr \n$e \nis satisfiable.") + assign!(necessary_exprs, assignment) + assign!(conflicting_exprs, assignment) + end +end + +# We're done, so don't forget to clean up. +close(interactive_solver) \ No newline at end of file diff --git a/src/BitVectorExpr.jl b/src/BitVectorExpr.jl index 72a22d0..04cd647 100644 --- a/src/BitVectorExpr.jl +++ b/src/BitVectorExpr.jl @@ -1,6 +1,6 @@ import Base.getindex, Base.setproperty! import Base.+, Base.-, Base.*, Base.<<, Base.>>, Base.>>>, Base.div, Base.&, Base.|, Base.~, Base.nor, Base.nand -import Base.>, Base.>=, Base.<, Base.<=, Base.== +import Base.>, Base.>=, Base.<, Base.<=, Base.==, Base.!= # >>> is arithmetic shift right, corresponding to bvashr in SMT-LIB # >> is logical shift right, bvlshr in SMT-LIB # << is logical shift left, bvshl in SMT-LIB @@ -23,7 +23,7 @@ mutable struct BitVectorExpr{T<:Integer} <: AbstractBitVectorExpr children::Array{C}, value::Union{T, Nothing, Missing}, name::String, - length::Int; + length=children[1].length; __is_commutative = false) where T <: Integer where C <: AbstractExpr = new(op, children, value, name, length, __is_commutative) end @@ -132,9 +132,9 @@ end ##### Integer arithmetic ##### -+(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(+, :bvadd, BitVectorExpr, [e1, e2], __is_commutative=true, __try_flatten=true) --(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(-, :bvsub, BitVectorExpr, [e1, e2]) -*(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(*, :bvmul, BitVectorExpr, [e1, e2],__is_commutative=true, __try_flatten=true) ++(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(+, :bvadd, BitVectorExpr, [e1, e2], __is_commutative=true, __try_flatten=true) +-(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(-, :bvsub, BitVectorExpr, [e1, e2]) +*(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(*, :bvmul, BitVectorExpr, [e1, e2],__is_commutative=true, __try_flatten=true) """ div(a::BitVectorExpr, b::BitVectorExpr) @@ -165,21 +165,21 @@ __signfix(f::Function) = (a, b) -> unsigned(f(signed(a), signed(b))) Unsigned remainder of BitVector a divided by BitVector b. """ -urem(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(rem, :bvurem, BitVectorExpr, [e1, e2]) +urem(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(rem, :bvurem, BitVectorExpr, [e1, e2]) """ a << b Logical left shift a << b. """ -<<(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(<<, :bvshl, BitVectorExpr, [e1, e2]) # shift left +<<(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(<<, :bvshl, BitVectorExpr, [e1, e2]) # shift left """ a >>> b Logical right shift a >>> b. """ ->>>(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(>>>, :bvlshr, BitVectorExpr, [e1, e2]) # logical shift right +>>>(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(>>>, :bvlshr, BitVectorExpr, [e1, e2]) # logical shift right # Extra arithmetic operators supported by Z3 but not part of the SMT-LIB standard. @@ -188,14 +188,14 @@ Logical right shift a >>> b. Signed remainder of BitVector a divided by BitVector b. This operator is not part of the SMT-LIB standard BitVector theory: it is implemented by Z3. It may not be available when using other solvers. """ -srem(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(__signfix(rem), :bvsrem, BitVectorExpr, [e1, e2]) # unique to z3 +srem(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(__signfix(rem), :bvsrem, BitVectorExpr, [e1, e2]) # unique to z3 """ smod(a::BitVectorExpr, b::BitVectorExpr) Signed modulus of BitVector a divided by BitVector b. This operator is not part of the SMT-LIB standard BitVector theory: it is implemented by Z3. It may not be available when using other solvers. """ -smod(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(__signfix(mod), :bvsmod, BitVectorExpr, [e1, e2]) # unique to z3 +smod(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(__signfix(mod), :bvsmod, BitVectorExpr, [e1, e2]) # unique to z3 """ a >> b @@ -228,6 +228,7 @@ end and(zs::Vararg{Union{T, Integer}}) where T <: AbstractBitVectorExpr = and(collect(zs)) # We need this declaration to enable the syntax and.([z1, z2,...,zn]) where z1, z2,...,zn are broadcast-compatible + """ a | b or(a, b, c...) @@ -266,7 +267,7 @@ nand(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop((a,b) -> # note that bvxnor is left-accumulating, so bvxnor(a, b, c) = bvxnor(bvxnor(a, b), c) # bvnor and bvnand have arity 2 -xnor(a::T,b::T) where T <: Integer = (a & b) | (~a & ~b) +xnor(a::Integer,b::Integer) = (a & b) | (~a & ~b) function xnor(es_mixed::Array{T}) where T es_mixed = collect(es_mixed) @@ -288,6 +289,7 @@ Bitwise xnor. When n>2 operands are provided, xnor is left-associative (that is, """ xnor(zs::Vararg{Union{T, Integer}}) where T <: AbstractBitVectorExpr = xnor(collect(zs)) # We need this declaration to enable the syntax and.([z1, z2,...,zn]) where z1, z2,...,zn are broadcast-compatible +xnor(zs::Base.Generator) = xnor(collect(zs)) """ ~a @@ -297,13 +299,19 @@ Bitwise not. ~(e::BitVectorExpr) = __bv1op(e, ~, :bvnot) ##### Bitwise predicates ##### -<(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(>, :bvult, BoolExpr, [e1, e2]) -<=(e1::T, e2::T) where T <: AbstractBitVectorExpr = __bvnop(>=, :bvule, BoolExpr, [e1, e2]) +<(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(>, :bvult, BoolExpr, [e1, e2]) +<=(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(>=, :bvule, BoolExpr, [e1, e2]) >(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(>, :bvugt, BoolExpr, [e1, e2]) >=(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop(>=, :bvuge, BoolExpr, [e1, e2]) (==)(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) = __bvnop((==), :eq, BoolExpr, [e1, e2]) +function distinct(e1::AbstractBitVectorExpr, e2::AbstractBitVectorExpr) + value = isnothing(e1.value) || isnothing(e2.value) ? nothing : e1.value != e2.value + name = __get_hash_name(:distinct, [e1, e2], is_commutative=true) + return BoolExpr(:distinct, [e1, e2], value, name, __is_commutative=true) +end + # Signed comparisons are supported by Z3 but not part of the SMT-LIB standard. """" slt(a::BitVectorExpr, b::BitVectorExpr) @@ -487,16 +495,13 @@ end # Variables cannot be padded! For example, 0x0101 (Uint16) cannot be added to (_ BitVec 8). -__2ops = [:+, :-, :*, :/, :<, :<=, :>, :>=, :sle, :slt, :sge, :sgt, :nand, :nor, :<<, :>>, :>>>, :&, :|, :~, :srem, :urem, :smod] +__2ops = [:+, :-, :*, :/, :<, :<=, :>, :>=, :(==), :!=, :sle, :slt, :sge, :sgt, :nand, :nor, :<<, :>>, :>>>, :&, :|, :~, :srem, :urem, :smod] for op in __2ops @eval $op(a::Integer, b::AbstractBitVectorExpr) = $op(bvconst(a, b.length), b) @eval $op(a::AbstractBitVectorExpr, b::Integer) = $op(a, bvconst(b, a.length)) end -(==)(e::AbstractBitVectorExpr, c::Integer) = e == bvconst(c, e.length) -(==)(c::Integer, e::AbstractBitVectorExpr) = bvconst(c, e.length) == e - ##### CONSTANT VERSIONS (for value propagation) ##### function __trim_bits!(e::AbstractBitVectorExpr) @@ -530,6 +535,7 @@ __bitvector_const_ops = Dict( :bvsle => __signfix(<=), :bvsgt => __signfix(>=), :bvsge => __signfix(>), + :eq => (==) ) # We overload this function from sat.jl to specialize it @@ -548,8 +554,11 @@ function __propagate_value!(z::AbstractBitVectorExpr) ReturnIntType = typeof(z).parameters[1] v = z.children[1].value z.value = v & ReturnIntType(reduce(|, map((i) -> 2^(i-1), z.range))) - else + elseif z.op ∈ keys(__bitvector_const_ops) op = __bitvector_const_ops[z.op] z.value = length(vs)>1 ? op(vs...) : op(vs[1]) + else + op = eval(z.op) + z.value = length(vs)>1 ? op(vs...) : op(vs[1]) end end \ No newline at end of file diff --git a/src/BoolExpr.jl b/src/BoolExpr.jl index c95b4be..8d3d614 100644 --- a/src/BoolExpr.jl +++ b/src/BoolExpr.jl @@ -72,7 +72,7 @@ end "Test equality of two AbstractExprs. To construct an equality constraint, use `==`." function Base.isequal(expr1::AbstractExpr, expr2::AbstractExpr) return (expr1.op == expr2.op) && - all(expr1.value .== expr2.value) && + (expr1.value == expr2.value) && (expr1.name == expr2.name) && (expr1.__is_commutative ? __is_permutation(expr1.children, expr2.children) : ((length(expr1.children) == length(expr2.children)) && all(isequal.(expr1.children, expr2.children)))) end diff --git a/src/BooleanOperations.jl b/src/BooleanOperations.jl index 53b4000..5b26b85 100644 --- a/src/BooleanOperations.jl +++ b/src/BooleanOperations.jl @@ -1,4 +1,4 @@ -import Base.all, Base.any, Base.xor +import Base.all, Base.any, Base.xor, Base.! include("BoolExpr.jl") include("utilities.jl") @@ -54,10 +54,19 @@ Note: Broacasting a unary operator requires the syntax `.¬z` which can be confu ``` """ -not(z::BoolExpr) = BoolExpr(:not, [z], isnothing(z.value) ? nothing : !(z.value), __get_hash_name(:not, [z])) +function not(z::BoolExpr) + # catch the special case where we have not(x == y) which should be distinct(x,y) + if z.op == :eq && length(z.children) == 2 + value = isnothing(z.value) ? nothing : !(z.value) + return BoolExpr(:distinct, z.children, value, __get_hash_name(:distinct, z.children, is_commutative=true), __is_commutative=true) + else + return BoolExpr(:not, [z], isnothing(z.value) ? nothing : !(z.value), __get_hash_name(:not, [z])) + end +end not(zs::Array{T}) where T <: BoolExpr = map(not, zs) ¬(z::BoolExpr) = not(z) ¬(zs::Array{T}) where T <: BoolExpr = not(zs) +!(e::BoolExpr) = not(e) # this is necessary because a != b is !(a == b) so we need ! of BoolExpr to define != for AbstractExpr ∧(z1::BoolExpr, z2::BoolExpr) = and([z1, z2]) ∨(z1::BoolExpr, z2::BoolExpr) = or([z1, z2]) @@ -101,6 +110,9 @@ Special cases: and(zs::Vararg{Union{T, Bool}}) where T <: BoolExpr = and(collect(zs)) # We need this declaration to enable the syntax and.([z1, z2,...,zn]) where z1, z2,...,zn are broadcast-compatible +# and this one is for generators +and(exprs::Base.Generator) = and(collect(exprs)) + function or(zs::Array{T}, literals=Bool[]) where T <: BoolExpr if length(literals) > 0 if any(literals) # if any literal is 1 @@ -139,6 +151,7 @@ Special cases: """ or(zs::Vararg{Union{T, Bool}}) where T <: BoolExpr = or(collect(zs)) # We need this declaration to enable the syntax or.([z1, z2,...,zn]) where z1, z2,...,z are broadcast-compatible +or(exprs::Base.Generator) = or(collect(exprs)) ##### ADDITIONAL OPERATORS IN THE SMT BOOL CORE SPEC ##### """ @@ -179,6 +192,8 @@ end # We need this extra line to enable the syntax xor.([z1, z2,...,zn]) where z1, z2,...,z are broadcast-compatible xor(zs::Vararg{Union{T, Bool}}) where T <: AbstractExpr = xor(collect(zs)) +xor(exprs::Base.Generator) = xor(collect(exprs)) + # this is the const version xor(values::Union{BitVector, Array{T}}) where T <: Bool = sum(values) == 1 @@ -255,7 +270,6 @@ iff(z1::BoolExpr, z2::Bool) = z2 ? z1 : ¬z1 # if z2 is true z1 must be true and iff(z1::Bool, z2::BoolExpr) = z1 ? z2 : ¬z2 iff(z1::Bool, z2::Bool) = z1 == z2 - ##### ADDITIONAL OPERATIONS ##### """ diff --git a/src/IntExpr.jl b/src/IntExpr.jl index eb04941..30a12d4 100644 --- a/src/IntExpr.jl +++ b/src/IntExpr.jl @@ -1,4 +1,4 @@ -import Base.<, Base.<=, Base.>, Base.<=, Base.+, Base.-, Base.*, Base./, Base.== +import Base.<, Base.<=, Base.>, Base.<=, Base.+, Base.-, Base.*, Base./, Base.==, Base.!= abstract type NumericExpr <: AbstractExpr end @@ -75,8 +75,8 @@ NumericInteroperableExpr = Union{NumericExpr, BoolExpr} NumericInteroperableConst = Union{Bool, Int, Float64} NumericInteroperable = Union{NumericInteroperableExpr, NumericInteroperableConst} -__wrap_const(c::Float64) = RealExpr(:const, AbstractExpr[], c, "const_$c") -__wrap_const(c::Union{Int, Bool}) = IntExpr(:const, AbstractExpr[], c, "const_$c") +__wrap_const(c::Float64) = RealExpr(:const, AbstractExpr[], c, c >= 0 ? "const_$c" : "const_neg_$(abs(c))") +__wrap_const(c::Union{Int, Bool}) = IntExpr(:const, AbstractExpr[], c, c >= 0 ? "const_$c" : "const_neg_$(abs(c))") # prevents names like -1 from being generated, which are disallowed in SMT-LIB ##### COMPARISON OPERATIONS #### @@ -187,6 +187,38 @@ function Base.:(==)(e1::NumericInteroperableExpr, e2::NumericInteroperableExpr) return BoolExpr(:eq, [e1, e2], value, name, __is_commutative=true) end +""" + distinct(x, y) + distinct(zs::Array{AbstractExpr}) + +Returns the SMT-LIB `distinct` operator. `distinct(x, y)` is semantically equal to `x != y` or `not(x == y)`. +The syntax `distinct(exprs)` where `exprs` is an array of expressions is shorthand for "every element of zs is unique". Thus, + +```julia +@satvariable(a[1:3], Int) +# this statement is true +isequal( + distinct(a) + and(distinct(a[1], a[2]), distinct(a[1], a[3]), distinct(a[2], a[3])) + ) +```` +""" +function distinct(e1::NumericInteroperableExpr, e2::NumericInteroperableExpr) + value = isnothing(e1.value) || isnothing(e2.value) ? nothing : e1.value != e2.value + name = __get_hash_name(:distinct, [e1, e2], is_commutative=true) + return BoolExpr(:distinct, [e1, e2], value, name, __is_commutative=true) +end + +# This is defined for AbstractExpr such that other types (BitVector etc) don't have to reimplement it as long as they implement the two-argument distinct +function distinct(es::Array{T}) where T <: AbstractExpr + es = flatten(es) # now it's 1D + # this expression uses Iterators.product and takes the upper triangular part of the product to avoid duplicates like (i,j) and (j,i) + return and([distinct(es[i], es[j]) for (i,j) in Iterators.product(1:length(es), 1:length(es)) if i != j && i <= j]) +end + +distinct(es::Base.Generator) = distinct(collect(es)) + + # INTEROPERABILITY FOR COMPARISON OPERATIONS Base.:>(e1::NumericInteroperableExpr, e2::NumericInteroperableConst) = e1 > __wrap_const(e2) Base.:>(e1::NumericInteroperableConst, e2::NumericInteroperableExpr) = __wrap_const(e1) > e2 @@ -201,6 +233,10 @@ Base.:<=(e1::NumericInteroperableConst, e2::NumericInteroperableExpr) = __wrap_c Base.:(==)(e1::NumericInteroperableExpr, e2::NumericInteroperableConst) = e1 == __wrap_const(e2) Base.:(==)(e1::NumericInteroperableConst, e2::NumericInteroperableExpr) = __wrap_const(e1) == e2 +distinct(e1::NumericInteroperableExpr, e2::NumericInteroperableConst) = distinct(e1, __wrap_const(e2)) +distinct(e1::NumericInteroperableConst, e2::NumericInteroperableExpr) = distinct(__wrap_const(e1), e2) +distinct(e1::NumericInteroperableConst, e2::NumericInteroperableConst) = e1 != e2 + ##### UNARY OPERATIONS ##### """ diff --git a/src/Satisfiability.jl b/src/Satisfiability.jl index 560a15e..6f5f7fb 100644 --- a/src/Satisfiability.jl +++ b/src/Satisfiability.jl @@ -3,7 +3,9 @@ module Satisfiability export AbstractExpr, BoolExpr, IntExpr, + UninterpretedFunc, @satvariable, + @uninterpreted, RealExpr, AbstractBitVectorExpr, BitVectorExpr, @@ -22,8 +24,8 @@ export value export - ==, <, <=, >, >= - + ==, <, <=, >, >=, + distinct export +, -, *, / @@ -39,8 +41,8 @@ export &, |, ~, srem, smod, - nor, - nand, + nor, ⊽, + nand, ⊼, xnor, slt, sle, sgt, sge, @@ -52,13 +54,19 @@ export smt, save export Solver, + InteractiveSolver, Z3, - cvc5, + CVC5, sat!, send_command, - open_solver, - nested_parens_match, - parse_smt_output + open, close, + push, pop, + assert!, + #set_option!, get_option, + nested_parens_match, is_sat_or_unsat, + parse_model, + assign!, + reset!, reset_assertions! # This tells us how to invoke the solvers DEFAULT_SOLVER_CMDS = Dict( @@ -81,6 +89,8 @@ include("IntExpr.jl") include("BitVectorExpr.jl") +include("uninterpreted_func.jl") + # include @satvariable later because we need some functions from BitVector to declare that type include("smt_macros.jl") include("multiple_dispatch_ops.jl") diff --git a/src/call_solver.jl b/src/call_solver.jl index 5359656..1f7b00e 100644 --- a/src/call_solver.jl +++ b/src/call_solver.jl @@ -1,32 +1,61 @@ +import Base.open, Base.close + ##### SOLVER OBJECT ##### -struct Solver +abstract type AbstractSolver end + +struct Solver <: AbstractSolver name::String cmd::Cmd options::Dict{String, Any} end -# some instantiation options -Solver(name::String, cmd::Cmd) = Solver(name, cmd, Dict{String, Any}()) +##### INTERACTIVE SOLVER ##### +# This is an open process +mutable struct InteractiveSolver <: AbstractSolver + name::String + cmd::Cmd + options::Dict{String, Any} + pstdin::Pipe + pstdout::Pipe + pstderr::Pipe + proc::Base.Process + command_history::Array{String} +end + + +# some instantiation options, currently we are not using kwargs +Solver(name::String, cmd::Cmd; kwargs...) = Solver(name, cmd, kwargs) if Sys.iswindows() - Z3() = Solver("Z3", `z3.exe -smt2 -in`, Dict{String, Any}()) - cvc5() = Solver("cvc5", `cvc5.exe --interactive --produce-models`, Dict{String, Any}()) + Z3(; kwargs...) = Solver("Z3", `z3.exe -smt2 -in`, kwargs) + CVC5(; kwargs...) = Solver("CVC5", `cvc5.exe --interactive --produce-models`, kwargs) else - Z3() = Solver("Z3", `z3 -smt2 -in`, Dict{String, Any}()) - cvc5() = Solver("cvc5", `cvc5 --interactive --produce-models`, Dict{String, Any}()) + Z3(; kwargs...) = Solver("Z3", `z3 -smt2 -in`, kwargs) + CVC5(; kwargs...) = Solver("CVC5", `cvc5 --interactive --produce-models`, kwargs) end ##### INVOKE AND TALK TO SOLVER ##### # __wait_for_result attempts to accumulate output from pstdout until is_done is true -function __wait_for_result(pstdout::Base.Pipe, is_done; sleeptime=0.002) +function __wait_for_result(pstdout::Base.Pipe, is_done; sleeptime=0.02, timeout=Inf) output = "" + line_ending = Sys.iswindows() ? "\r\n" : '\n' + time_elapsed = 0.0 + # IO DRAMA https://discourse.julialang.org/t/avoiding-readavailable-when-communicating-with-long-lived-external-program/61611/20 + # IO DRAMA https://github.com/JuliaLang/julia/issues/24526 + # GET YOUR IO DRAMA HERE https://github.com/JuliaLang/julia/issues/24717 + # The summary of the IO drama is that readavailable can block. + # We cannot check bytesavailable because on some systems the OS level buffer hides the bytesavailable. Thus, bytesavailable returns 0 even when pstdout has bytes + # There is currently NO way to read the buffered bytes from a Pipe in a non-blocking manner. This may be related to issue #24717, pipe async-ness + # This is why we have to timeout in send_command which waits for __wait_for_result. while true new_bytes = String(readavailable(pstdout)) output = output*new_bytes - if is_done(output) + + if is_done(output) || time_elapsed > timeout return output end sleep(sleeptime) + time_elapsed += sleeptime end end @@ -41,30 +70,50 @@ function nested_parens_match(output::String) end """ - send_command(pstdin::Base.Pipe, pstdout::Base.Pipe, cmd::String; is_done=nested_parens_match, timeout=Inf) + is_sat_or_unsat(output::String) + +Return true if output contains "sat" or "unsat". +""" +is_sat_or_unsat(output) = occursin("sat", output) + +""" + send_command(pstdin::Base.Pipe, pstdout::Base.Pipe, cmd::String; is_done=nested_parens_match, timeout=Inf, line_ending='\n') Open a solver in a new process with in, out, and err pipes. Uses Base.process. Check the source code to see the exact implementation. """ -function send_command(pstdin::Base.Pipe, pstdout::Base.Pipe, cmd::String; is_done = f(output::String) = false, line_ending='\n') - # f() is required because Task can only schedule functions with no inputs - f() = __wait_for_result(pstdout, is_done) - t = Task(f) - schedule(t) - # now send the command - write(pstdin, cmd*line_ending) # in case the input is missing a line ending - - output = fetch(t) # throws automatically if t fails - return output +function send_command(solver::InteractiveSolver, cmd::Union{Array{S}, S}; is_done = f(output::String) = true, timeout=Inf, line_ending='\n', dont_wait=false) where S <: String + if isa(cmd, String) + push!(solver.command_history, strip.(split(cmd, line_ending, keepempty=false))...) + else + push!(solver.command_history, strip.(cmd)...) + cmd = join(cmd, line_ending) # batch them for writing + end + + if dont_wait + write(solver.pstdin, cmd*line_ending) # in case the input is missing a line ending + return nothing + else + # f() is required because Task can only schedule functions with no inputs + f() = __wait_for_result(solver.pstdout, is_done, timeout=timeout) + t = Task(f) + schedule(t) + @debug "Sending command: $cmd$line_ending" + # now send the command + write(solver.pstdin, cmd*line_ending) # in case the input is missing a line ending + # DO NOT PLACE ANYTHING HERE. It may throw off the timing. + output = fetch(t) # throws automatically if t fails + return output + end end """ - proc, pstdin, pstdout, pstderr = open_solver(s::Solver) + interactive_solver = open(s::Solver) Open a solver in a new process with in, out, and err pipes. Uses Base.process. Check the source code to see the exact implementation. """ -function open_solver(s::Solver) +function open(s::Solver) pstdin = Pipe() pstdout = Pipe() pstderr = Pipe() @@ -74,40 +123,58 @@ function open_solver(s::Solver) if process_exited(proc) @error "Unable to start solver with command $(s.cmd)." end - return proc, pstdin, pstdout, pstderr + return InteractiveSolver(s.name, s.cmd, s.options, pstdin, pstdout, pstderr, proc, String[]) +end + +""" + close(s::InteractiveSolver) + +Close an InteractiveSolver, cleaning up and terminating its processes and pipes. +""" +function close(s::InteractiveSolver) + send_command(s, "(exit)", dont_wait=true) + close(s.pstdin) + close(s.pstdout) + close(s.pstderr) + close(s.proc) end +# This function opens the interactive_solver and solves the problem. It's used by sat!. It shouldn't really be used by users. function talk_to_solver(input::String, s::Solver) line_ending = Sys.iswindows() ? "\r\n" : '\n' - proc, pstdin, pstdout, pstderr = open_solver(s) + interactive_solver = open(s) - is_sat_or_unsat(output) = occursin("sat", output) - output = send_command(pstdin, pstdout, input, is_done=is_sat_or_unsat, line_ending=line_ending) + output = send_command(interactive_solver, input, is_done=is_sat_or_unsat, line_ending=line_ending) @debug "Solver output for (check-sat):$line_ending\"$output\"" if length(output) == 0 @error "Unable to retrieve solver output." - return :ERROR, Dict{String, Bool}(), proc + close(interactive_solver) + return :ERROR, Dict{String, Bool}() - elseif process_exited(proc) + elseif process_exited(interactive_solver.proc) @error "Solver crashed on input! Please file a bug report." - return :ERROR, Dict{String, Bool}(), proc + close(interactive_solver) + return :ERROR, Dict{String, Bool}() end original_output = deepcopy(output) output = filter(isletter, output) if output == "unsat" # the problem was successfully given to Z3, but it is UNSAT - return :UNSAT, Dict{String, Bool}(), proc + close(interactive_solver) + return :UNSAT, Dict{String, Bool}() elseif output == "sat" # the problem is satisfiable - output = send_command(pstdin, pstdout, "(get-model)$line_ending", is_done=nested_parens_match, line_ending=line_ending) + output = send_command(interactive_solver, "(get-model)$line_ending", is_done=nested_parens_match, line_ending=line_ending) @debug "Solver output for (get-model):$line_ending\"$output\"" - satisfying_assignment = parse_smt_output(output) - return :SAT, satisfying_assignment, proc + satisfying_assignment = parse_model(output) + close(interactive_solver) + return :SAT, satisfying_assignment else @error "Solver error:$line_ending $(original_output)" - return :ERROR, Dict{String, Bool}(), proc + close(interactive_solver) + return :ERROR, Dict{String, Bool}() end end diff --git a/src/sat.jl b/src/sat.jl index f4c9ac0..f0d82c9 100644 --- a/src/sat.jl +++ b/src/sat.jl @@ -1,64 +1,244 @@ +import Base.push!, Base.pop! + ##### CALLING A SAT SOLVER ##### include("call_solver.jl") """ - solver = Z3() - sat!(z::BoolExpr, solver) - sat!(z1, z2,..., solver) + sat!(z::BoolExpr, Z3()) + sat!(z1, z2,..., CVC5()) Solve the SAT problem using a Solver. If the problem is satisfiable, update the values of all `BoolExprs` in `prob` with their satisfying assignments. Possible return values are `:SAT`, `:UNSAT`, or `:ERROR`. `prob` is only modified to add Boolean values if the return value is `:SAT`. +By default, sat! will reset the values of expressions in `prob` to `nothing` if `prob` is unsatisfiable. To change this behavior use the keyword argument `clear_values_if_unsat`. For example,`sat!(prob, CVC5(), clear_values_if_unsat=false)`. + +**Alternate usage:** + +```julia + io = open("some_file.smt") + status, values = sat!(io::IO, solver::Solver) + status, values = sat!(filename::String, solver::Solver) +```` +In io mode, sat! reads the contents of the Julia IO object and passes them to the solver. Thus, users must ensure `read(io)` will return a complete and correct string of SMT-LIB commands, including `(check-sat)` or equivalent. Alternatively, one can pass in a filename to be opened and closed within `sat!`. +Because the expressions are not passed into the function, `sat!` returns a dictionary containing the satisfying assignment. """ function sat!(prob::BoolExpr, solver::Solver, clear_values_if_unsat=true) smt_problem = smt(prob)*"(check-sat)\n" - status, values, proc = talk_to_solver(smt_problem, solver) + status, values = talk_to_solver(smt_problem, solver) # Only assign values if there are values. If status is :UNSAT or :ERROR, values will be an empty dict. if status == :SAT - __assign!(prob, values) + assign!(prob, values) elseif clear_values_if_unsat __clear_assignment!(prob) end - # TODO we don't need it rn, we return it in case we do useful things with it later like requesting unsat cores and stuff - kill(proc) + # sat! doesn't return the process. To use the process, for example to interact or get an unsat proof, use the lower-level functions in call_solver.jl return status end +function sat!(io::IO, solver::Solver) + status, values = talk_to_solver(read(io, String), solver) + + # sat! doesn't return the process. To use the process, for example to interact or get an unsat proof, use the lower-level functions in call_solver.jl + return status, values +end + +function sat!(name::String, solver::Solver) + io = open(name, "r") + status, values = sat!(io, solver) + close(io) + return status, values +end + sat!(zs::Vararg{Union{Array{T}, T}}; solver=Z3()) where T <: BoolExpr = length(zs) > 0 ? sat!(__flatten_nested_exprs(all, zs...), solver) : error("Cannot solve empty problem (no expressions).") # this version accepts an array of exprs and [exprs] (arrays), for example sat!([z1, z2, z3]) -sat!(zs::Array, solver::Solver) = sat!(zs...; solver=Solver) +#sat!(zs::Array, solver::Solver) = sat!(zs...; solver=Solver) + + +##### INTERACTIVE SOLVING ##### + +# In this mode one works with an InteractiveSolver which is an open process to a solver +""" + push!(solver::InteractiveSolver, n=1) + +Push n empty assertion levels onto the solver's assertion stack. Usually `push!(solver, 1)` is sufficient. +If n is 0, no assertion levels are pushed. This corresponds exactly to the SMT-LIB command `(push n)`. +""" +function push!(solver::InteractiveSolver, n=1; is_done=(o::String)->true, timeout=0.002, line_ending=Sys.iswindows() ? "\r\n" : '\n') + if n < 0 + error("Must push a nonnegative number of assertion levels.") + end + while n >= 0 + output = send_command(solver, "(push 1)", dont_wait=true, line_ending=line_ending) + n -= 1 + return output + end +end + +""" + pop!(solver::InteractiveSolver, n=1) + +Pop n empty assertion levels off the solver's assertion stack. +If n is 0, no assertion levels are pushed. This corresponds exactly to the SMT-LIB command `(pop n)`. +""" +function pop!(solver::InteractiveSolver, n=1; is_done=(o::String)->true, timeout=0.002, line_ending=Sys.iswindows() ? "\r\n" : '\n') + if n >= 0 + # we also have to pop these commands off command_history + indices = findall((l) -> startswith(l, "(push"), solver.command_history) + if length(indices)>=n # something to pop + index = indices[end-n+1] # if n = 1 this will be the last, thus we pop the correct levels off + + solver.command_history = solver.command_history[1:index-1] # -1 to pop off the push() command as well + output = send_command(solver, "(pop $n)", dont_wait=true, line_ending=line_ending) + else + @error("Cannot pop $n levels because the current assertion level is $(length(indices)).") + end + return output + else + error("Must pop a nonnegative number of assertion levels.") + end +end + +function assert(solver::InteractiveSolver, exprs::Vararg{T}) where T <: BoolExpr + +end + +""" + interactive_solver = open(Z3()) # open an InteractiveSolver process + status, values = sat!(interactive_solver, exprs...) # check satisfiability of exprs + +When working with an InteractiveSolver process, issues the `(check-sat)` command. +The optional `exprs`, if provided, will be assumed when `(check-sat)` is issued but **not** asserted on the stack. This is equivalent to the SMT-LIB `(check-sat-assuming expr1, expr2,...)` command. + +If no assertions have been made, sat! throws an error. + +**Note that in this mode, sat! can only set the values of exprs provided in the function call** +That means if you `assert(expr1)` and then call `sat!(interactive_solver, expr2)`, `value(expr1)` will be `nothing` **even if the problem is SAT**. To alleviate this, `sat!` returns `(status, values)` where `values` is a Dict of variable names and satisfying assignments. To assign the values of `expr1`, call `assign!(values, expr1)`. +""" +function sat!(interactive_solver::InteractiveSolver, exprs::Vararg{Union{Array{T}, T}}; line_ending=Sys.iswindows() ? "\r\n" : '\n') where T <: BoolExpr + # We cannot check sat if there are no assertions. The solver will be in the wrong mode. + exprs = length(exprs) > 0 ? __flatten_nested_exprs(all, exprs...) : exprs + if isa(exprs, BoolExpr) + exprs = [exprs,] + end + + dict = Dict{String, Any}() + if length(exprs)==0 && !any(map((c) -> startswith(c, "(assert"), interactive_solver.command_history)) + # We have no exprs to assert, so we dig through command_history to make sure there are assertions that haven't been reset. + @error "Cannot check satisfiability, no assertions." + return :ERROR, dict + elseif length(exprs) > 0 + # Make the definitions in exprs + commands = smt(exprs, assert=false, as_list=true) + # This filters out previously defined/declared statements. + # For example, if we already sent (define-fun x () Bool), sending it again produces a solver error. + to_send = filter((c) -> !(startswith(c, "(de") && strip(c) in interactive_solver.command_history), commands) + send_command(interactive_solver, to_send, line_ending=line_ending, dont_wait=true) + end + + # Now there's at least one assertion. + assumptions = length(exprs) == 0 ? "" : join(getproperty.(exprs, :name), " ") + @debug "check-sat-assuming $assumptions" + output = send_command(interactive_solver, "(check-sat-assuming ($assumptions))", is_done=is_sat_or_unsat, line_ending=line_ending) + status = :ERROR + @debug "Result is $output" + if strip(output) == "sat" + output = send_command(interactive_solver, "(get-model)", is_done=nested_parens_match, line_ending=line_ending) + dict = parse_model(output) + if length(exprs) != 0 + map((e) -> assign!(e, dict), exprs) + end + status = :SAT + elseif strip(output) == "unsat" + status = :UNSAT + end + return status, dict +end + + +""" + assert!(interactive_solver, expr1, expr2...) + assert!(interactive_solver, exprs::Array) + +Assert some expressions. interactive_solver must be an open InteractiveSolver process. +""" +function assert!(interactive_solver::InteractiveSolver, expr::BoolExpr; line_ending=Sys.iswindows() ? "\r\n" : '\n') + commands = smt(expr, assert=true, as_list=true) + # This filters out previously defined/declared statements. + # For example, if we already sent (define-fun x () Bool), sending it again produces a solver error. + to_send = filter((c) -> !(startswith(c, "(de") && strip(c) in interactive_solver.command_history), commands) + send_command(interactive_solver, to_send, line_ending=line_ending, dont_wait=true) +end + +assert!(interactive_solver::InteractiveSolver, exprs::Vararg{Union{Array{T}, T}}; line_ending=Sys.iswindows() ? "\r\n" : '\n') where T <: BoolExpr = length(exprs) > 0 ? + assert!(interactive_solver, __flatten_nested_exprs(all, exprs...), line_ending=line_ending) : + error("Cannot assert zero expressions.") + # this version accepts an array of exprs and [exprs] (arrays), for example assert!([z1, z2, z3]) + +""" + set_option(solver::InteractiveSolver, option, value) + + # for example, + set_option(solver, "produce-assertions", true) + set_option(solver, ":diagnostic-output-channel", "stderr") +Set a solver option. A list of options your solver may support can be found in [section 4.1.7 of the SMT-LIB standard](http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2021-05-12.pdf). +Note that + +See `get_option` for notes on successfully receiving long or slow solver responses. + """ +function set_option!(solver::InteractiveSolver, option::String, value::Any; is_done=(o::String)->false, timeout=0.002, line_ending=Sys.iswindows() ? "\r\n" : '\n') + output = send_command(solver, "(set-option :$option $value)", is_done=is_done, timeout=timeout, line_ending=line_ending) + return output +end + +""" + get_option(solver::InteractiveSolver, option) + + # for example + result = get_option(solver, "produce-assertions") + +Get the current value of a solver option. A list of options your solver may support can be found in [section 4.1.7 of the SMT-LIB standard](http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2021-05-12.pdf). + +If you have difficulty receiving a solver response, the keyword arguments timeout and is_done are provided. +timeout is a Float64 specifying the number of seconds to wait for the response. +is_done is a function. is_done(s::String) returns `true` if the output is complete and `false` otherwise. +This is primarily used to receive long responses which may arrive in several chunks. If you expect the output of your command to be wrapped in a single set of parentheses, use the provided function `nested_parens_match` for output checking. +""" +function get_option(solver::InteractiveSolver, option::String; is_done=(o::String)->false, timeout=0.002, line_ending=Sys.iswindows() ? "\r\n" : '\n') + output = send_command(solver, "(get-option :$option)", is_done=is_done, timeout=timeout, line_ending=line_ending) + return output +end + +""" + reset!(solver::InteractiveSolver) + +Resets the solver to its state when first opened, clearning `InteractiveSolver.command_history`. See [section 4.2.1](http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2021-05-12.pdf) of the SMT-LIB standard. +""" +function reset!(solver::InteractiveSolver) + solver.command_history = String[] + send_command(solver, "(reset)", dont_wait=true) +end + +""" + reset_assertions!(solver::InteractiveSolver) + +Removes all assertions, popping n levels off the solver's assertion stack. After this command, the stack will be at level 1 and there will be no assertions set. See [section 4.2.1](http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2021-05-12.pdf) of the SMT-LIB standard. +""" +function reset_assertions!(solver::InteractiveSolver) + solver.command_history = filter((l) -> !startswith(l, "(de") && !startswith(l, "(assert"), solver.command_history) + send_command(solver, "(reset-assertions)", dont_wait=true) +end ##### ASSIGNMENTS #### # see discussion on why this is the way it is # https://docs.julialang.org/en/v1/manual/performance-tips/#The-dangers-of-abusing-multiple-dispatch-(aka,-more-on-types-with-values-as-parameters) # https://groups.google.com/forum/#!msg/julia-users/jUMu9A3QKQQ/qjgVWr7vAwAJ -#= -__reductions = Dict( - :not => (values) -> !(values[1]), - :and => (values) -> reduce(&, values), - :or => (values) -> reduce(|, values), - :xor => (values) -> sum(values) == 1, - :implies => (values) -> !(values[1]) | values[2], - :iff => (values) -> values[1] == values[2], - :ite => (values) -> (values[1] & values[2]) | (values[1] & values[3]), - :eq => (values) -> values[1] == values[2], - :lt => (values) -> values[1] < values[2], - :leq => (values) -> values[1] <= values[2], - :gt => (values) -> values[1] > values[2], - :geq => (values) -> values[1] >= values[2], - :add => (values) -> sum(values), - :sub => (values) -> values[1] - sum(values[2:end]) , - :mul => (values) -> prod(values), - :div => (values) -> values[1] / prod(values[2:end]), -) -=# __julia_symbolic_ops = Dict( :eq => ==, @@ -76,8 +256,8 @@ __julia_symbolic_ops = Dict( # This is the default function for propagating the values back up in __assign! (called when a problem is sat and a satisfying assignment is found). # This function should be specialized as necessary. function __propagate_value!(z::AbstractExpr) - op = z.op ∈ keys(__julia_symbolic_ops) ? __julia_symbolic_ops[z.op] : eval(z.op) vs = getproperty.(z.children, :value) + op = z.op ∈ keys(__julia_symbolic_ops) ? __julia_symbolic_ops[z.op] : Satisfiability.eval(z.op) if length(vs)>1 z.value = op(vs...) else @@ -85,18 +265,46 @@ function __propagate_value!(z::AbstractExpr) end end -function __assign!(z::T, values::Dict) where T <: AbstractExpr +""" + assign!(e::AbstractExpr, assignment::Dict) + assign!(exprs::Array, assignment::Dict) + +Assigns the values of expressions in e (including nested expressions and variables) using `assignment`, a Dict where every key is a string corresponding to an expression name, and the corresponding value is its satisfying assignment. + +`assign!` is intended to be useful in two cases. +1. Using an `assignment` dict returned by `sat!` in interactive mode.This looks like: + +```julia + # define some exprs + interactive_solver = open(solver) + assert(interactive_solver, exprs...) + status, assignment = sat!(interactive_solver) + assign!.(exprs, assignment) +``` +2. Using an `assignment` dict returned by `parse_model`, which parses the raw SMT-LIB output of "(get-model)". +""" +function assign!(z::T, assignment::Dict) where T <: AbstractExpr if z.op == :identity - if z.name ∈ keys(values) - z.value = values[z.name] + if z.name ∈ keys(assignment) + z.value = assignment[z.name] else @warn "Value not found for variable $(z.name)." z.value = missing # this is better than nothing because & and | automatically skip it (three-valued logic). end elseif z.op == :const ; # const already has .value set so do nothing + elseif z.op == :ufunc + assign!(z.children[2], assignment) + if z.children[1].name in keys(assignment) + z.children[1].value = assignment[z.children[1].name] + z.value = ismissing(z.children[2].value) ? missing : z.children[1].value(z.children[2].value) + else + @warn "Value not found for variable $(z.name)." + z.children[1].value + z.value = missing # this is better than nothing because & and | automatically skip it (three-valued logic). + end else - if any(ismissing.(map( (z) -> __assign!(z, values), z.children))) + if any(ismissing.(map( (z) -> assign!(z, assignment), z.children))) z.value = missing else __propagate_value!(z) @@ -105,6 +313,8 @@ function __assign!(z::T, values::Dict) where T <: AbstractExpr return z.value end +assign!(zs::Array{T}, assignment::Dict) where T <: AbstractExpr = map((z) -> assign!(z, assignment), zs) + function __clear_assignment!(z::AbstractExpr) z.value = nothing if length(z.children) > 0 diff --git a/src/smt_representation.jl b/src/smt_representation.jl index 6520406..a0ab2b9 100644 --- a/src/smt_representation.jl +++ b/src/smt_representation.jl @@ -38,6 +38,7 @@ __smt_symbolic_ops = Dict( __smt_generated_ops = Dict( :int2bv => (e::AbstractBitVectorExpr) -> "(_ int2bv $(e.length))", :extract => (e::AbstractBitVectorExpr) -> "(_ extract $(last(e.range)-1) $(first(e.range)-1))", + :ufunc => (e::AbstractExpr) -> split(e.name, "_")[1] ) # Finally, we provide facilities for correct encoding of consts @@ -59,7 +60,7 @@ end ##### GENERATING SMTLIB REPRESENTATION ##### -""" +#= declare(z; line_ending='\n') Generate SMT variable declarations for a BoolExpr variable (operation = :identity). @@ -67,32 +68,19 @@ Generate SMT variable declarations for a BoolExpr variable (operation = :identit Examples: * `declare(a::IntExpr)` returns `"(declare-fun a () Int)\\n"` * `declare(and(z1, z2))` returns `"(declare-fun z1 () Bool)\\n(declare-fun z2 () Bool)\\n"`. -""" +=# function declare(z::AbstractExpr; line_ending='\n') - # There is only one variable - vartype = __smt_typestr(z) - if length(z) == 1 - return "(declare-fun $(z.name) () $vartype)$line_ending" - # Variable is 1D - elseif length(size(z)) == 1 - return join(map( (i) -> "(declare-fun $(z.name)_$i () $vartype)$line_ending", 1:size(z)[1])) - # Variable is 2D - elseif length(size(z)) == 2 - declarations = String[] - # map over 2D variable rows, then cols inside - m,n = size(z) - map(1:m) do i - append_unique!(declarations, map( (j) -> "(declare-fun $(z.name)_$(i)_$j () $vartype)$line_ending", 1:size(z)[2])) - end - return join(declarations) - else - error("Invalid size $(z.shape) for variable!") - end - join(declarations, line_ending) + return "(declare-fun $(z.name) () $(__smt_typestr(z)))" end -declare(zs::Array{T}; line_ending='\n') where T <: AbstractExpr = reduce(*, declare.(zs; line_ending=line_ending)) +declare(zs::Array{T}) where T <: AbstractExpr = reduce(*, declare.(zs; line_ending=line_ending)) +function declare_ufunc(e::AbstractExpr) + name = e.children[1].name + intype = __smt_typestr(e.children[2]) + outtype = __smt_typestr(e) + return "(declare-fun $name($intype) $outtype)" +end # Return either z.name or the correct (as z.name Type) if z.name is defined for multiple types # This multiple name misbehavior is allowed in SMT2; the expression (as z.name Type) is called a fully qualified name. @@ -110,14 +98,16 @@ function __get_smt_name(z::AbstractExpr) end end -"__define_n_op! is a helper function for defining the SMT statements for n-ary ops where n >= 2. +#= +#=__define_n_op! is a helper function for defining the SMT statements for n-ary ops where n >= 2. cache is a Dict where each value is an SMT statement and its key is the hash of the statement. This allows us to avoid two things: 1. Redeclaring SMT statements, which causes the solver to emit errors. -2. Re-using named functions. For example if we \"(define-fun FUNC_NAME or(z1, z2))\" and then the expression or(z1, z2) re-appears later in the expression \"and(or(z1, z2), z3)\", we can write and(FUNC_NAME, z3)." +2. Re-using named functions. For example if we \"(define-fun FUNC_NAME or(z1, z2))\" and then the expression or(z1, z2) re-appears later in the expression \"and(or(z1, z2), z3)\", we can write and(FUNC_NAME, z3). +=# function __define_n_op!(z::T, cache::Dict{UInt64, String}, depth::Int; assert=true, line_ending='\n') where T <: AbstractExpr children = z.children if length(children) == 0 # silly case but we should handle it - return "" + return String[] end if assert && depth == 0 && typeof(z) != BoolExpr @warn("Cannot assert non-Boolean expression $z") @@ -127,7 +117,7 @@ function __define_n_op!(z::T, cache::Dict{UInt64, String}, depth::Int; assert=tr #if length(children) == 1 # return assert && depth == 0 ? "(assert ($(children[1].name)))$line_ending" : "" #else - fname = __get_hash_name(z.op, children, is_commutative=z.__is_commutative) + #fname = __get_hash_name(z.op, children, is_commutative=z.__is_commutative) # if the expr is a :const it will have a value (e.g. 2 or 1.5), otherwise use its name # This yields a list like String["z_1", "z_2", "1"]. varnames = __get_smt_name.(children) @@ -135,18 +125,18 @@ function __define_n_op!(z::T, cache::Dict{UInt64, String}, depth::Int; assert=tr if z.__is_commutative varnames = sort(varnames) end - declaration = "(define-fun $fname () $outname ($(__smt_opnames(z)) $(join(varnames, " "))))$line_ending" + declaration = "(define-fun $(z.name) () $outname ($(__smt_opnames(z)) $(join(varnames, " "))))$line_ending" cache_key = hash(declaration) # we use this to find out if we already declared this item - prop = "" + prop = String[] if cache_key in keys(cache) prop = depth == 0 ? cache[cache_key] : "" else if assert && typeof(z) == BoolExpr && depth == 0 - prop = declaration*"(assert $fname)$line_ending" + prop = [declaration, "(assert $(z.name))$line_ending"] # the proposition is generated and cached now. - cache[cache_key] = "(assert $fname)$line_ending" + cache[cache_key] = "(assert $(z.name))$line_ending" else - prop = declaration + prop = [declaration,] end end return prop @@ -155,10 +145,9 @@ end function __define_1_op!(z::AbstractExpr, cache::Dict{UInt64, String}, depth::Int; assert=true, line_ending='\n') - fname = __get_hash_name(z.op, z.children) outtype = __smt_typestr(z) - prop = "" - declaration = "(define-fun $fname () $outtype ($(__smt_opnames(z)) $(__get_smt_name(z.children[1]))))$line_ending" + prop = String[] + declaration = "(define-fun $(z.name) () $outtype ($(__smt_opnames(z)) $(__get_smt_name(z.children[1]))))$line_ending" cache_key = hash(declaration) if assert && depth == 0 && typeof(z) != BoolExpr @@ -171,113 +160,129 @@ function __define_1_op!(z::AbstractExpr, cache::Dict{UInt64, String}, depth::Int # if depth = 0 that means we are at the top-level of a nested expression. # thus, if the expr is Boolean we should assert it. if assert && typeof(z) == BoolExpr && depth == 0 - prop = declaration*"(assert $fname)$line_ending" + prop = [declaration,"(assert $(z.name))$line_ending"] # the proposition is generated and cached now. - cache[cache_key] = "(assert $fname)$line_ending" + cache[cache_key] = "(assert $(z.name))$line_ending" else - prop = declaration + prop = [declaration,] end end return prop end +=# - -"smt!(prob, declarations, propositions) is an INTERNAL version of smt(prob). +#=smt!(prob, declarations, propositions) is an INTERNAL version of smt(prob). We use it to iteratively build a list of declarations and propositions. -Users should call smt(prob, line_ending)." -function smt!(z::AbstractExpr, declarations::Array{T}, propositions::Array{T}, cache::Dict{UInt64, String}, depth::Int; assert=true, line_ending='\n') :: Tuple{Array{T}, Array{T}} where T <: String +Users should call smt(prob, line_ending).=# +function smt!(z::AbstractExpr, declarations::Array{T}, propositions::Array{T}, cache::Dict{UInt64, String}, depth::Int; assert=true) where T <: String if z.op == :identity # a single variable - n = length(declarations) - push_unique!(declarations, declare(z; line_ending=line_ending)) + #n = length(declarations) + push_unique!(declarations, declare(z)) if assert && depth == 0 if typeof(z) != BoolExpr @warn("Cannot assert non-Boolean expression $z") else - push_unique!(propositions, "(assert $(z.name))$line_ending") + push_unique!(propositions, "(assert $(z.name))") end end + prop = __get_smt_name(z) elseif z.op == :const - ; # do nothing, constants don't need declarations + # ; # do nothing, constants don't need declarations and uninterpreted functions get declared in else so their children also get declared + prop = __format_smt_const(typeof(z), z) - else # an expression with operators and children - map( (c) -> smt!(c, declarations, propositions, cache, depth+1, assert=assert, line_ending=line_ending) , z.children) + elseif z.op == :ufunc + #prop = "(define-fun $(z.name) () $(__smt_typestr(z)) ($(z.children[1].name) $(z.children[2].name)))$line_ending" + #push_unique!(propositions, prop) - if length(z.children) == 1 - prop = __define_1_op!(z, cache, depth, assert=assert, line_ending=line_ending) + push_unique!(declarations, declare_ufunc(z)) + child_prop = smt!(z.children[2], declarations, propositions, cache, depth+1, assert=assert) + prop = "($(z.children[1].name) $child_prop)" + + else # an expression with operators and children + child_props = map( (c) -> smt!(c, declarations, propositions, cache, depth+1, assert=assert) , z.children) + prop = "($(__smt_opnames(z)) $(join(child_props, " ")))" + #if length(z.children) == 1 + #prop = __define_1_op!(z, cache, depth, assert=assert, line_ending=line_ending) - else # all n-ary ops where n >= 2 - prop = __define_n_op!(z, cache, depth, assert=assert, line_ending=line_ending) - #n = length(propositions) - #else - # error("Unknown operation $(z.op)!") - end + #else # all n-ary ops where n >= 2 + #prop = __define_n_op!(z, cache, depth, assert=assert, line_ending=line_ending) + #end - push_unique!(propositions, prop) + #append_unique!(propositions, prop) end - return declarations, propositions + return prop end # Example: # * `smt(and(z1, z2))` yields the statements `(declare-fun z1 () Bool)\n(declare-fun z2 () Bool)\n(define-fun AND_31df279ea7439224 Bool (and z1 z2))\n(assert AND_31df279ea7439224)\n` """ - smt(z::AbstractExpr; line_ending='\n') - smt(z1,...,zn) - smt([z1,...,zn]) + smt(z::AbstractExpr) + smt(z1,...,zn; assert=true) + smt([z1,...,zn]; assert=true, line_ending='\n', as_list=true) Generate the SMT representation of `z` or `and(z1,...,zn)`. When calling `smt([z1,...,zn])`, the array must have type `Array{AbstractExpr}`. Note that list comprehensions do not preserve array typing. For example, if `z` is an array of `BoolExpr`, `[z[i] for i=1:n]` will be an array of type `Any`. To preserve the correct type, use `BoolExpr[z[i] for i=1:n]`. -""" -function smt(zs::Array{T}; assert=true, line_ending=nothing) where T <: AbstractExpr - if isnothing(line_ending) - line_ending = Sys.iswindows() ? "\r\n" : '\n' - end +Optional keyword arguments are: +1. `assert = true|false`: default `true`. Whether to generate the (assert ...) SMT-LIB statement, which asserts that an expression must be true. This option is only valid if `smt` is called on a Boolean expression. +2. `line_ending`: If not set, this defaults to "\r\n" on Windows and '\n' everywhere else. +3. `as_list = true|false`: default `false`. When `true`, `smt` returns a list of commands instead of a single `line_ending`-separated string. +""" +function smt(zs_mixed::Vararg{Union{Array{T}, T}}; assert=true, line_ending=Sys.iswindows() ? "\r\n" : "\n", as_list=false) where T <: AbstractExpr declarations = String[] propositions = String[] cache = Dict{UInt64, String}() - if length(zs) == 1 - declarations, propositions = smt!(zs[1], declarations, propositions, cache, 0, assert=assert, line_ending=line_ending) + + zs = cat(map((z) -> isa(z, Array) ? flatten(z) : [z], zs_mixed)..., dims=1) + propositions = map((z) -> smt!(z, declarations, propositions, cache, 0, assert=assert), zs) + + # Returning + statements = assert ? + cat(declarations, map((i) -> "(assert $(propositions[i]))", filter( (i) -> isa(zs[i], BoolExpr), 1:length(propositions))), dims=1) : + cat(declarations, map((i) -> "(define-fun $(zs[i].name) () $( __smt_typestr(zs[i])) $(propositions[i]))", filter((i) -> !(zs[i].op in [:const, :identity]), 1:length(propositions))), dims=1) + if as_list + return statements else - map((z) -> smt!(z, declarations, propositions, cache, 0, assert=assert, line_ending=line_ending), zs) + # this expression concatenates all the strings in row 1, then all the strings in row 2, etc. + return join(statements, line_ending)*line_ending end - # this expression concatenates all the strings in row 1, then all the strings in row 2, etc. - return reduce(*, declarations)*reduce(*,propositions) end -smt(zs::Vararg{Union{Array{T}, T}}; assert=true, line_ending=nothing) where T <: AbstractExpr = smt(collect(zs), assert=assert, line_ending=line_ending) - ##### WRITE TO FILE ##### """ - save(z::AbstractExpr, filename; line_ending='\n') - save(z::Array{AbstractExpr}, filename=filename, line_ending='\n') - save(z1, z2,..., filename) # z1, z2,... are type AbstractExpr - -Write the SMT representation of `z` or `and(z1,...,zn)` to filename.smt. + save(z1, z2,..., io=open("out.smt", "w")) + save(z1, z2,..., io=open("out.smt", "w", line_ending='\n', start_commands=nothing, end_commands=nothing) + +Write the SMT representation of `z` or `and(z1,...,zn)` to an IO object. +Keyword arguments: +* `io` is a Julia IO object, for example an open file for writing. +* `line_ending` configures the line ending character. If left off, the default is `\r\n` on Windows systems and `\n` everywhere else. +* `start_commands` are inserted before `smt(z)`. Typically one uses this to include `(set-info ...)` or `(set-option ...)` statements. +* `end_commands` are inserted after `(check-sat)`. This tends to be less useful unless you already know whether your problem is satisfiable. """ -function save(prob::AbstractExpr, filename="out"; assert=true, check_sat=true, line_ending=nothing) +function save(zs::Vararg{Union{Array{T}, T}}; io=open("out.smt", "w"), assert=true, check_sat=true, line_ending=nothing, start_commands=nothing, end_commands=nothing) where T <: AbstractExpr if isnothing(line_ending) line_ending = Sys.iswindows() ? "\r\n" : '\n' end - if assert && typeof(prob) != BoolExpr + if assert && !all(isa.(zs, BoolExpr)) @warn "Top-level expression must be Boolean to produce a valid SMT program." end - open("$filename.smt", "w") do io - write(io, smt(prob, assert=assert, line_ending=line_ending)) - if check_sat - write(io, "(check-sat)$line_ending") - end + if !isnothing(start_commands) + write(io, start_commands*"$line_ending") + end + write(io, smt(zs..., assert=assert, line_ending=line_ending)) + if check_sat + write(io, "(check-sat)$line_ending") end + if !isnothing(end_commands) + write(io, end_commands*"$line_ending") + end + close(io) end - -# this is the version that accepts a list of exprs, for example save(z1, z2, z3). This is necessary because if z1::BoolExpr and z2::Array{BoolExpr}, etc, then the typing is too difficult to make an array. -save(zs::Vararg{Union{Array{T}, T}}; filename="out", assert=true, check_sat=true, line_ending=nothing) where T <: AbstractExpr = save(__flatten_nested_exprs(all, zs...), filename, assert=assert, check_sat=check_sat, line_ending=line_ending) - -# array version for convenience. THIS DOES NOT ACCEPT ARRAYS OF MIXED AbstractExpr and Array{AbstractExpr}. -save(zs::Array{T}, filename="out"; assert=true, check_sat=true, line_ending=nothing) where T <: AbstractExpr = save(all(zs), filename, assert=assert, check_sat=check_sat, line_ending=line_ending) diff --git a/src/uninterpreted_func.jl b/src/uninterpreted_func.jl new file mode 100644 index 0000000..daaf14d --- /dev/null +++ b/src/uninterpreted_func.jl @@ -0,0 +1,97 @@ +#= +Uninterpreted functions are SMT-LIB objects that take input of a specific type and give output of a specific type +In Julia, this looks like +@satvariable(f, UninterpretedFunc, Int, Int) +@satvariable(f, UninterpretedFunc, (BitVector, 32), (BitVector, 32)) +@satvariable(f, UninterpretedFunc, (BitVector, 32), Bool) +etc +f(x) should return the right type expr with operator :name because the SMT syntax is (f x) for f(x) +thus, we only need to make sure the uninterpreted func is declared +and that (f x) works +=# + +# TO DO present the SMT-LIB function definition to the user when a satisfying assignment is known + +mutable struct UninterpretedFunc <: AbstractExpr + op :: Symbol + children :: Array{AbstractExpr} + value :: Union{Function, Nothing, Missing} + name :: String + __is_commutative :: Bool + call_on_vars::Union{Function, Nothing} + call_on_const::Union{Function, Nothing} + + UninterpretedFunc(name::String) = new(:ufunc, AbstractExpr[], nothing, name, false, nothing, nothing) +end +# This enables the syntax f(x) on variables and constants. +(f::UninterpretedFunc)(x::T) where T <: AbstractExpr = begin + e = f.call_on_vars(x) + if !(isnothing(f.value) || ismissing(f.value)) + e.value = ismissing(x.value) || isnothing(x.value) ? x.value : f(x.value) + end + return e +end +(f::UninterpretedFunc)(x::C) where C = !(isnothing(f.value) || ismissing(f.value)) ? f.value(x) : f.call_on_const(x) + +# this is for propagating values, which uses the name of the operation as the function call +ufunc(f::UninterpretedFunc, x::AbstractExpr) = f.value + +""" + @uninterpreted(f, Int, Bool) # f takes as input IntExpr and returns BoolExpr + @uninterpreted(g, (BitVector, 32), (BitVector, 32)) # g's input and output values are BitVectors of length 32 + +Define an SMT-LIB uninterpreted function. An uninterpreted function can be thought of as an unknown mapping between input and output values. +The task of the SMT solver is then to determine whether a mapping exists such that some Boolean statement is true. + +For example, we can ask whether there exists a function `f(x)`` such that `f(f(x)) == x`, `f(x) == y` and `x != y`. + +```julia +@satvariable(x, Bool) +@satvariable(y, Bool) +@uninterpreted(f, Bool, Bool) + +status = sat!(distinct(x,y), f(x) == y, f(f(x)) == x, solver=Z3()) +println("status = \$status") +``` +""" +macro uninterpreted(f, InTypespec, OutTypespec) + # it must be BitVector with size + local wrapper = nothing + local ConstType = nothing + if isa(InTypespec, Expr) && InTypespec.args[1] == :BitVector + # typeof(e).parameters[1] returns the type of the first parameter to the parametric type of e + ConstType = nextsize(InTypespec.args[2]) + wrapper = (x) -> bvconst(x, bitcount(x)) # this is safe because a const of smaller bit-length can be combined with a variable of larger bit-length + elseif InTypespec == :Int + ConstType = Int + wrapper = Satisfiability.__wrap_const + elseif InTypespec == :Real + ConstType = Float64 + wrapper = Satisfiability.__wrap_const + elseif InTypespec == :Bool + ConstType = Bool + wrapper = (b) -> BoolExpr(:const, AbstractExpr[], b, "const_$b") + else + @error("Unable to determine wrapper function for $InTypespec-interoperable const") + end + + local InType = isa(InTypespec, Symbol) ? Symbol("$(InTypespec)Expr") : Expr(:curly, Symbol("$(InTypespec.args[1])Expr"), nextsize(InTypespec.args[2])) + local OutType = isa(OutTypespec, Symbol) ? Symbol("$(OutTypespec)Expr") : Expr(:curly, Symbol("$(OutTypespec.args[1])Expr"), nextsize(OutTypespec.args[2])) + + if isa(OutType, Expr) + return esc( + quote + $f = UninterpretedFunc("$($(String(f)))") + # this is the function on its type + $f.call_on_vars = (x::$InType) -> $OutType(:ufunc, AbstractExpr[$f, x], nothing, "$($(String(f)))_$(x.name)", x.length) + # this is the function on its const type + $f.call_on_const = (x::$ConstType) -> begin wx = $wrapper(x); $OutType(:ufunc, AbstractExpr[$f, wx], nothing, "$($(String(f)))_$(wx.name)", x.length) end + end) + else + return esc(quote + $f = UninterpretedFunc("$($(String(f)))") + $f.call_on_vars = (x::$InType) -> $OutType(:ufunc, AbstractExpr[$f, x], nothing, "$($(String(f)))_$(x.name)") + $f.call_on_const = (x::$ConstType) -> begin wx = $wrapper(x); $OutType(:ufunc, AbstractExpr[$f, wx], nothing, "$($(String(f)))_$(wx.name)") end + end) + end +end \ No newline at end of file diff --git a/src/utilities.jl b/src/utilities.jl index dd28cba..18c1cb7 100644 --- a/src/utilities.jl +++ b/src/utilities.jl @@ -126,19 +126,51 @@ end # top level parser for SMT output -function parse_smt_output(original_output::AbstractString) +""" + output = "( + (define-fun x () Bool true) + (define-fun y () Bool false) + (define-fun f ((x!0 Bool)) Bool (ite (= x!0 false) true false))" + dict = parse_model(output) + +Parse the SMT-LIB-formatted output of `(get-model)`, returning a Dict of names and values. +Values will be of the correct type; thus, in the example `dict["x"]` will be `true`. +Uninterpreted function values will be Julia functions themselves, thus `dict["f"]` is a function that accepts a Bool and returns a Bool. + +This function is primarily useful when working with `InteractiveSolver`s. +""" +function parse_model(original_output::AbstractString) assignments = Dict() # recall the whole output will be surrounded by () - output = __split_statements(original_output) + #output = __split_statements(original_output) + output = split_items(original_output) if length(output) > 1 # something is wrong! @error "Unable to parse output\n\"$original_output\"" return assignments end + output = output[1] + # now we've cleared the outer (), so iterating will go over each line in the model - for line in __split_statements(output[1]) - name, type, value = parse_smt_statement(line) - if !isnothing(value) - assignments[name] = value + # first let's check if this output is a solver error + if isa(output, String) # this means something went wrong, we got (error ...) + @error "Solver error:\n$output" + return assignments + end + + for line in output + if line[1] == Symbol("define-fun") + @debug "parsing $line" + name = String(line[2]) + # a function with no input arguments, since the syntax is define-fun name () ... + if length(line[3]) == 0 + val = evaluate_values(line[end]) + if !isnothing(val) # evaluate_values skips symbolic expressions, returning nothing, since we only care about variables. + assignments[name] = val + end + # a function with input arguments, thus we know it is an uninterpreted function because our code doesn't generate other kinds + else + assignments[name] = construct_function(line[end]) + end end end return assignments @@ -163,28 +195,26 @@ function parse_type(type::AbstractString) end # parse a string corresponding to an SMT-LIB value, and if it has no variables, return the numeric value -function parse_return_root_values(value::AbstractString) +function parse_value(value::AbstractString; skip_symbols=true) if value == "true" - return true, 4 + return true elseif value == "false" - return false, 5 + return false end # First check if it's a simple number, eg 1 or 2.3. result = match(r"^[0-9\.]+$", value) if !isnothing(result) - l = length(value) - return '.' in value ? parse(Float64, value) : parse(Int, value), l + return '.' in value ? parse(Float64, value) : parse(Int, value) end # Now check if it's a hex or binary value (#x0f or #b01, for example) result = match(r"^\#(x|b)[0-9a-f]+$", value) if !isnothing(result) - value = "0"*value[2:end] l = length(value) - return value[2] == 'x' ? parse(Int, value[3:end], base=16) : parse(Int, value[3:end], base=2), l + return value[2] == 'x' ? parse(Int, value[3:end], base=16) : parse(Int, value[3:end], base=2) end # we get here if it's a variable - return nothing, 0 + return skip_symbols ? missing : Symbol(value) end function split_arguments(arguments::AbstractString) @@ -198,63 +228,60 @@ function split_arguments(arguments::AbstractString) end op = result.captures[1] ptr = result.offsets[1] + length(op) - args = Any[] + args = split_items(arguments, ptr) + #@debug "returning $op, $args" + return [Symbol(op), args...] +end +function split_items(arguments::AbstractString, ptr=1) + args = Any[] while ptr <= length(arguments) subs = lstrip(arguments[ptr:end]) # strip leading whitespace ptr += length(arguments[ptr:end]) - length(subs) # the difference - - @debug "looking in $(subs)" + if ptr > length(arguments) + break + end if startswith(subs, "(") tmp = __split_statements(subs)[1] # now we have the inside of (...) - arg = split_arguments(tmp) ptr += length(tmp)+2 #$ the + 2 is for () - + arg = split_items(tmp) else - tmp = split(subs, ' ', limit=2, keepempty=false)[1] - arg, l = parse_return_root_values(tmp) - ptr += l#:length(tmp) - - end - if isnothing(arg) # give up, this expression is symbolic, eg + a b - @debug "expr is symbolic, don't need to read it" - return nothing + arg = split(subs, (' ', '\n', '\r'), limit=2, keepempty=false)[1] + ptr += length(arg) + arg = parse_value(arg, skip_symbols=false) end push!(args, arg) end - @debug "returning $op, $args" - return Symbol(op), args + return args end evaluate_values(values::Number) = values function evaluate_values(values_nested) - op, values = values_nested - values = map( (v) -> isa(v, Number) ? v : evaluate_values(v), values) - return eval(op)(values...) -end - -function parse_smt_statement(input::AbstractString) - @debug "parsing $input" - # this regex matches expressions like define-fun name () Type|(_ Type ...) (something)|integer|float - # that is, the start and end () must be stripped - matcher = r"^define-fun\s+([a-zA-Z0-9_]+)\s\(\)\s+([a-zA-Z]+|\(.*\))\s+(true|false|[a-f0-9\.\#x]+|\(.*\))$" - result = match(matcher, input) - if isnothing(result) || any(isnothing.(result.captures)) - @debug "Unable to read \"$input\"" - return nothing, nothing, nothing + op, values = values_nested[1], values_nested[2:end] + #@debug "evaluating $op on $values" + if !any(isa.(values, Symbol)) + values = map( (v) -> isa(v, Number) ? v : evaluate_values(v), values) + if !any(isnothing.(values)) + return op in keys(__smt_output_funcs) ? __smt_output_funcs[op](values...) : eval(op)(values...) + end end - # now we know we have all three, the first is the name, the second is the type, the third is the value - (name, type, value) = result.captures - - type = parse_type(type) + return nothing +end - if startswith(value, "(") - value = split_arguments(__split_statements(value)[1]) - value = isnothing(value) ? value : evaluate_values(value) +function construct_function(spec) + if isa(spec, Number) # constant function + return (x) -> spec else - value, _ = parse_return_root_values(value) + op = spec[1] ∈ keys(__smt_output_funcs) ? __smt_output_funcs[spec[1]] : eval(spec[1]) + return (x) -> op(map((s) -> isa(s, Symbol) ? x : construct_function(s)(x), spec[2:end])...) end - - return name, type, isnothing(value) ? value : type(value) -end \ No newline at end of file +end + +# some functions we might encounter in solver output +__smt_output_funcs = Dict( + :to_real => (a::Int) -> Float64(Int), + :to_int => (a::Float64) -> Integer(floor(a)), + :as => (a, type) -> type == :Int ? Integer(floor(a)) : eval(type)(a), + :(=) => (a,b) -> a == b, +) \ No newline at end of file diff --git a/test/bitvector_tests.jl b/test/bitvector_tests.jl index 8be383f..e20a156 100644 --- a/test/bitvector_tests.jl +++ b/test/bitvector_tests.jl @@ -28,6 +28,10 @@ CLEAR_VARNAMES!() @test isequal(op(a,b), BitVectorExpr{UInt16}(name, [a,b], nothing, Satisfiability.__get_hash_name(name, [a,b]), 16)) end + # distinct + @satvariable(dd[1:3], BitVector, 4) + @test isequal(distinct(dd), and(distinct(dd[1], dd[2]), distinct(dd[1], dd[3]), distinct(dd[2], dd[3]))) + # three special cases! the native Julia bitwise ops have weird forms (&)(a,b) because they are short circuitable @test isequal(a & b, BitVectorExpr{UInt16}(:bvand, [a,b], nothing, Satisfiability.__get_hash_name(:bvand, [a,b], is_commutative=true), 16)) @test isequal(a | b, BitVectorExpr{UInt16}(:bvor, [a,b], nothing, Satisfiability.__get_hash_name(:bvor, [a,b], is_commutative=true), 16)) @@ -95,16 +99,13 @@ end (define-fun concat_17d687cb15cd0d00 () (_ BitVec 24) (concat a b a))\n" @test smt((a + b) << 0x2, assert=false) == "(declare-fun a () (_ BitVec 8)) (declare-fun b () (_ BitVec 8)) -(define-fun bvadd_e2cecf976dd1f170 () (_ BitVec 8) (bvadd a b)) -(define-fun bvshl_e76bba3dcff1a5b9 () (_ BitVec 8) (bvshl bvadd_e2cecf976dd1f170 #x02))\n" +(define-fun bvshl_e76bba3dcff1a5b9 () (_ BitVec 8) (bvshl (bvadd a b) #x02))\n" @test smt(0xff >= b) == "(declare-fun b () (_ BitVec 8)) -(define-fun bvuge_7d54a0b390b2b8bc () Bool (bvuge #xff b)) -(assert bvuge_7d54a0b390b2b8bc)\n" +(assert (bvuge #xff b))\n" @test smt(0xff == a) == "(declare-fun a () (_ BitVec 8)) -(define-fun eq_51725a0a6dd23455 () Bool (= #xff a)) -(assert eq_51725a0a6dd23455)\n" +(assert (= #xff a))\n" end @@ -117,14 +118,10 @@ end (define-fun int2bv_1a6e7a9c3b2f1483 () (_ BitVec 64) ((_ int2bv 64) (as c Int)))\n" @test smt(bv2int(b) < 1) == "(declare-fun b () (_ BitVec 8)) -(define-fun bv2int_9551acae52440d48 () Int (bv2int b)) -(define-fun lt_6154633d9e26b5a1 () Bool (< bv2int_9551acae52440d48 1)) -(assert lt_6154633d9e26b5a1)\n" +(assert (< (bv2int b) 1))\n" @test smt(a[1:8] == 0xff) == "(declare-fun a () (_ BitVec 8)) -(define-fun extract_fa232f94411b00cd () (_ BitVec 8) ((_ extract 7 0) a)) -(define-fun eq_43f451e68918e86b () Bool (= extract_fa232f94411b00cd #xff)) -(assert eq_43f451e68918e86b)\n" +(assert (= ((_ extract 7 0) a) #xff))\n" end @testset "BitVector result parsing" begin @@ -146,8 +143,8 @@ end @satvariable(a, BitVector, 8) @satvariable(b, BitVector, 8) expr = and(a[1:8] == 0xff, bv2int(b) < 1) - vals = Satisfiability.parse_smt_output(output) - Satisfiability.__assign!(expr, vals) + vals = Satisfiability.parse_model(output) + Satisfiability.assign!(expr, vals) @test a.value == 0xff @test b.value == 0x00 diff --git a/test/boolean_operation_tests.jl b/test/boolean_operation_tests.jl index 86ad41f..3a8f905 100644 --- a/test/boolean_operation_tests.jl +++ b/test/boolean_operation_tests.jl @@ -76,9 +76,21 @@ end # Can construct negation @test isequal((not(z32))[1].children, [z32[1]]) + # negation of equality simplifies to distinct when it's a 2-op + @satvariable(a3[1:3], Bool) + @test isequal(¬(a3[1]==a3[2]), distinct(a3[1:2])) + # and doesn't when it's a n>2-op + @test isequal((¬a3[1]).op, :not) + # this tests the generator syntax + @test isequal(distinct(a3), distinct(a3[i] for i=1:3)) # Can construct Implies @test isequal((z1 .⟹ z1)[1].children, [z1[1], z1[1]]) + + # Can construct == and distinct + @test isequal(z1[1] == true, true == z1[1]) + @test isequal(z1[1] != z12[1], z12[1] != z1[1]) + @test isequal(distinct(z12), and(distinct(z12[1,1], z12[1,2]))) # Can construct all() and any() statements @test isequal(any(z1), z1[1]) diff --git a/test/int_real_tests.jl b/test/int_real_tests.jl index 8ac5ae4..0ee7633 100644 --- a/test/int_real_tests.jl +++ b/test/int_real_tests.jl @@ -34,6 +34,11 @@ using Test @test isequal((0 .== c)[1,1] , c[1,1] == 0) @test isequal((0 .< c)[1,1] , 0 < c[1,1]) && isequal((0 .> c)[1,1] , 0 > c[1,1]) @test isequal((1 .- c)[1,1], 1 - c[1,1]) && isequal((2 .* c)[1,1], c[1,1] * 2) && isequal((2 ./ br)[1], 2 / br[1]) + + # distinct + @test isequal(distinct(c[1,2], c[1,1]), c[1,2] != c[1,1]) + @test distinct(3,4) && !distinct(true, true) + @test isequal(distinct(b), distinct(b[2], b[1])) end @testset "Construct n-ary ops" begin diff --git a/test/output_parse_tests.jl b/test/output_parse_tests.jl index bc7a917..e8979f9 100644 --- a/test/output_parse_tests.jl +++ b/test/output_parse_tests.jl @@ -2,26 +2,20 @@ using Satisfiability using Test @testset "Basic parser tests" begin - parse_return_root_values = Satisfiability.parse_return_root_values + parse_value = Satisfiability.parse_value evaluate_values = Satisfiability.evaluate_values split_arguments = Satisfiability.split_arguments # const values - @test evaluate_values(parse_return_root_values("2.0013")[1]) == 2.0013 - @test evaluate_values(parse_return_root_values("0")[1]) == 0 - @test evaluate_values(parse_return_root_values("#x00ff")[1]) == 255 - @test evaluate_values(parse_return_root_values("#b1111")[1]) == 15 + @test evaluate_values(parse_value("2.0013")[1]) == 2.0013 + @test evaluate_values(parse_value("0")[1]) == 0 + @test evaluate_values(parse_value("#x00ff")[1]) == 255 + @test evaluate_values(parse_value("#b1111")[1]) == 15 # things in parentheses @test evaluate_values(split_arguments("- 12")) == -12 @test abs(evaluate_values(split_arguments("/ 2.0 3.0")) - 2.0/3.0) < 1e-6 @test abs(evaluate_values(split_arguments("/ 1.0 (- 4.0)")) + 1.0/4.0) < 1e-6 - # whole SMT lines - parse_smt_statement = Satisfiability.parse_smt_statement - @test parse_smt_statement("define-fun b () Int\n (- 2)") == ("b", Int64, -2) - @test parse_smt_statement("define-fun geq_e1bd460e008a4d8b () Bool - (>= (+ 1 b) b)") == ("geq_e1bd460e008a4d8b", Bool, nothing) - @test parse_smt_statement("define-fun yR () Real (/ 2.0 3.0)") == ("yR", Float64, 2.0/3.0) end @testset "Parse some z3 output with ints and floats" begin @@ -30,20 +24,11 @@ end (- 2)) (define-fun a () Int 0) -(define-fun geq_e1bd460e008a4d8b () Bool - (>= (+ 1 b) b)) -(define-fun and_8014e2e143374eea () Bool - (and (>= (+ 1 b) b) (<= (+ 2 a b) a))) -(define-fun add_99dce5c325207b7 () Int - (+ 2 a b)) -(define-fun add_f0a93f0b97da1ab2 () Int - (+ 1 b)) -(define-fun leq_8df5432ee845c9e8 () Bool - (<= (+ 2 a b) a)) )" - result = Satisfiability.parse_smt_output(output) - @test result == Dict("b" => -2, "a" => 0) + result = Satisfiability.parse_model(output) + @test result["b"] == -2 && result["a"] == 0 + output = "( (define-fun a () Int 0) @@ -56,7 +41,7 @@ end (define-fun y () Int 0) )" - result = Satisfiability.parse_smt_output(output) + result = Satisfiability.parse_model(output) @test abs(result["xR"] - 2.0/3.) < 1e-6 @test abs(result["yR"] + 5.0/6.) < 1e-6 @@ -65,21 +50,22 @@ end (+ 2 a b)) (define-fun a () Real 0.0) -))" - result = Satisfiability.parse_smt_output(output) - @test result == Dict("b" => -2.5, "a" => 0.0) +)" + result = Satisfiability.parse_model(output) + @test result["b"] == -2.5 && result["a"] == 0.0 output = "( (define-fun bvule_e2cecf976dd1f170 () Bool (bvule a b)) (define-fun a () (_ BitVec 16) - #x0000) + #x00f0) (define-fun b () (_ BitVec 16) #x0000) )" + result = Satisfiability.parse_model(output) + @test result["b"] == 0x0000 && result["a"] == 0x00f0 - result = "(get-model) -( + output = "( (define-fun tmp () Real (/ (to_real a) (to_real b))) (define-fun b () Int @@ -89,8 +75,8 @@ end (define-fun /0 ((x!0 Real) (x!1 Real)) Real 0.0) )" - result = Satisfiability.parse_smt_output(output) - @test result == Dict("a" => 0, "b" => 0) + result = Satisfiability.parse_model(output) + @test result["a"] == 0 && result["b"] == 0 end diff --git a/test/runtests.jl b/test/runtests.jl index 2091fcd..663c771 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -22,6 +22,8 @@ include("output_parse_tests.jl") include("bitvector_tests.jl") +include("ufunc_tests.jl") + # Extra: Check that defining duplicate variables yields a warning @testset "Duplicate variable warning" begin SET_DUPLICATE_NAME_WARNING!(true) diff --git a/test/smt_representation_tests.jl b/test/smt_representation_tests.jl index a6ff2d0..78c27a9 100644 --- a/test/smt_representation_tests.jl +++ b/test/smt_representation_tests.jl @@ -2,8 +2,6 @@ push!(LOAD_PATH, "../src") using Satisfiability using Test -__get_hash_name = Satisfiability.__get_hash_name - @testset "Individual SMTLIB2 statements" begin @satvariable(z1, Bool) @satvariable(z2[1:1], Bool) @@ -17,21 +15,17 @@ __get_hash_name = Satisfiability.__get_hash_name # idea from https://microsoft.github.io/z3guide/docs/logic/propositional-logic # broadcast expression correctly generated - hashname = __get_hash_name(:and, [z1, z2[1]], is_commutative=true) - @test smt(z1 .∧ z2) == smt(z1, assert=false)*smt(z2, assert=false)*"(define-fun $hashname () Bool (and z1 z2_1))\n(assert $hashname)\n" + @test smt(z1 .∧ z2) == smt(z1, assert=false)*smt(z2, assert=false)*"(assert (and z1 z2_1))\n" # indexing creates a 1d expression - hashname = __get_hash_name(:and, [z1, z12[1,2]], is_commutative=true) - @test smt(z1 ∧ z12[1,2]) == smt(z1, assert=false)*smt(z12[1,2], assert=false)*"(define-fun $hashname () Bool (and z1 z12_1_2))\n(assert $hashname)\n" - hashname = __get_hash_name(:and, z12, is_commutative=true) - @test smt(z12[1,1] ∧ z12[1,2]) == smt(z12[1,1], assert=false)*smt(z12[1,2], assert=false)*"(define-fun $hashname () Bool (and z12_1_1 z12_1_2))\n(assert $hashname)\n" + @test smt(z1 ∧ z12[1,2]) == smt(z1, assert=false)*smt(z12[1,2], assert=false)*"(assert (and z1 z12_1_2))\n" + + @test smt(z12[1,1] ∧ z12[1,2]) == smt(z12[1,1], assert=false)*smt(z12[1,2], assert=false)*"(assert (and z12_1_1 z12_1_2))\n" # all() and any() work - hashname = __get_hash_name(:or, [z1 z12], is_commutative=true) - @test smt(any(z1 .∨ z12)) == smt(z1, assert=false)*smt(z12, assert=false)*"(define-fun $hashname () Bool (or z1 z12_1_1 z12_1_2))\n(assert $hashname)\n" + @test smt(any(z1 .∨ z12)) == smt(z1, assert=false)*smt(z12, assert=false)*"(assert (or z1 z12_1_1 z12_1_2))\n" - hashname = __get_hash_name(:and, [z1 z12], is_commutative=true) - @test smt(all(z1 .∧ z12)) == smt(z1, assert=false)*smt(z12, assert=false)*"(define-fun $hashname () Bool (and z1 z12_1_1 z12_1_2))\n(assert $hashname)\n" + @test smt(all(z1 .∧ z12)) == smt(z1, assert=false)*smt(z12, assert=false)*"(assert (and z1 z12_1_1 z12_1_2))\n" end @@ -40,55 +34,42 @@ end @satvariable(z12[1:1, 1:2], Bool) # implies, also tests \r\n - hashname = __get_hash_name(:implies, [z1, z12[1,2]]) - @test smt(z1 ⟹ z12[1,2], line_ending="\r\n") == "(declare-fun z1 () Bool)\r\n(declare-fun z12_1_2 () Bool)\r\n(define-fun $hashname () Bool (=> z1 z12_1_2))\r\n(assert $hashname)\r\n" + @test smt(z1 ⟹ z12[1,2], line_ending="\r\n") == "(declare-fun z1 () Bool)\r\n(declare-fun z12_1_2 () Bool)\r\n(assert (=> z1 z12_1_2))\r\n" # iff, also tests \r\n - hashname = __get_hash_name(:iff, [z1, z12[1,2]]) - @test smt(z1 ⟺ z12[1,2], line_ending="\r\n") == smt(z1, assert=false, line_ending="\r\n")*smt(z12[1,2], assert=false, line_ending="\r\n")*"(define-fun $hashname () Bool (= z1 z12_1_2))\r\n(assert $hashname)\r\n" + @test smt(z1 ⟺ z12[1,2], line_ending="\r\n") == smt(z1, assert=false, line_ending="\r\n")*smt(z12[1,2], assert=false, line_ending="\r\n")*"(assert (= z1 z12_1_2))\r\n" # xor - hashname = __get_hash_name(:xor, z12, is_commutative=true) - @test smt(xor(z12[1,1], z12[1,2])) == smt(z12[1,1], assert=false)*smt(z12[1,2], assert=false)*"(define-fun $hashname () Bool (xor z12_1_1 z12_1_2))\n(assert $hashname)\n" + @test smt(xor(z12[1,1], z12[1,2])) == smt(z12[1,1], assert=false)*smt(z12[1,2], assert=false)*"(assert (xor z12_1_1 z12_1_2))\n" # if-then-else @satvariable(x, Bool) @satvariable(y, Bool) @satvariable(z, Bool) - hashname = __get_hash_name(:ite, [x,y,z]) - @test smt(ite(x,y,z)) == smt(x, assert=false)*smt(y, assert=false)*smt(z, assert=false)*"(define-fun $hashname () Bool (ite x y z))\n(assert $hashname)\n" + @test smt(ite(x,y,z)) == smt(x, assert=false)*smt(y, assert=false)*smt(z, assert=false)*"(assert (ite x y z))\n" end @testset "Generate nested expr without duplications" begin @satvariable(x, Bool) @satvariable(y, Bool) - xyname = __get_hash_name(:and, [x,y], is_commutative=true) xy = and(x,y) yx = and(y,x) - topname = __get_hash_name(:or, [xy], is_commutative=true) - @test smt(or(xy, yx)) == smt(x, assert=false)*smt(y, assert=false)* -"(define-fun $xyname () Bool (and x y)) -(define-fun $topname () Bool (or $xyname)) -(assert $topname)\n" + @test smt(or(xy, yx)) == smt(x, assert=false)*smt(y, assert=false)*"(assert (or (and x y)))\n" # Generate a nested expr with not (1-ary op) without duplicating statements - xname = __get_hash_name(:not, [x]) nx = ¬x - xyname = __get_hash_name(:and, [nx], is_commutative=true) @test smt(and(¬x, ¬x)) == smt(x, assert=false)* -"(define-fun $xname () Bool (not x)) -(define-fun $xyname () Bool (and $xname)) -(assert $xyname)\n" +"(assert (and (not x)))\n" end @testset "Generate SMT file" begin @satvariable(z1, Bool) @satvariable(z12[1:1, 1:2], Bool) - save(z1 .∧ z12, "outfile") + save(z1 .∧ z12, io=open("outfile.smt", "w"), check_sat=true) text = read(open("outfile.smt", "r"), String) - @test text == smt(all(z1 .∧ z12))*"(check-sat)\n" + @test text == smt(z1 .∧ z12)*"(check-sat)\n" @satvariable(a, Int) - @test_logs (:warn, "Top-level expression must be Boolean to produce a valid SMT program.") match_mode=:any save(a) + @test_logs (:warn, "Top-level expression must be Boolean to produce a valid SMT program.") match_mode=:any save(a, io=open("outfile.smt", "w"), check_sat=true) end \ No newline at end of file diff --git a/test/solver_interface_tests.jl b/test/solver_interface_tests.jl index 50f50b7..4b0bc7d 100644 --- a/test/solver_interface_tests.jl +++ b/test/solver_interface_tests.jl @@ -1,8 +1,7 @@ +push!(LOAD_PATH, "../src") using Satisfiability using Test, Logging -__assign! = Satisfiability.__assign! - # assign is used after calling the solver so it belongs here. @testset "Assign values" begin @satvariable(x[1:3], Bool) @@ -17,7 +16,7 @@ __assign! = Satisfiability.__assign! ) values = Dict{String, Bool}("x_1" => 1,"x_2" => 1,"x_3" => 1, "y_1" => 0, "y_2" => 0,) - __assign!(prob, values) + assign!(prob, values) @test ismissing(value(z)) z.value = 0 @@ -33,71 +32,71 @@ __assign! = Satisfiability.__assign! # Test other assignments, especially reducing child values test_expr = BoolExpr(:xor, x, nothing, "test") - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == false test_expr.op = :ite - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == true test_expr = BoolExpr(:implies, y, nothing, "test") - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == true test_expr.op = :iff - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == true # done with Booleans, now test Int assignments values = Dict("a2_1"=>1, "a2_2"=>2, "a2_3"=>3) @satvariable(a2[1:2], Int) test_expr = IntExpr(:eq, a2, nothing, "test") - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == false test_expr.op = :lt - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == true test_expr.op = :gt - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == false test_expr.op = :leq - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == true test_expr.op = :geq - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == false # Arithmetic operations values = Dict("a3_1"=>1, "a3_2"=>2, "a3_3"=>3) @satvariable(a3[1:3], Int) test_expr = IntExpr(:add, a3, nothing, "test") - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == 6 test_expr.op = :mul - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == 6 test_expr.op = :sub; test_expr.children = test_expr.children[1:2] - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == -1 values = Dict("ar2_1"=>1., "ar2_2"=>2.) @satvariable(ar2[1:2], Real) test_expr = RealExpr(:div, ar2, nothing, "test") - __assign!(test_expr, values) + assign!(test_expr, values) @test value(test_expr) == (1. / 2.) # Can't assign nonexistent operator #test_expr = RealExpr(:fakeop, Real(1,"a"), nothing, "test") - #@test_logs (:error, "Unknown operator fakeop") __assign!(test_expr, values) + #@test_logs (:error, "Unknown operator fakeop") assign!(test_expr, values) # Missing value assigned to missing @satvariable(b, Int) - @test ismissing(__assign!(b, values)) + @test ismissing(assign!(b, values)) end @testset "Solving a SAT problem" begin - # can initialize cvc5 - s = cvc5() + # can initialize CVC5 + s = CVC5() @satvariable(x[1:3], Bool) @satvariable(y[1:2], Bool) @@ -114,6 +113,11 @@ end @test value(z) == 1 @test all(value(x) .== [1 1 1]) @test all(value(y) .== [0 0]) + + # Problem comes from a file + save(exprs, io=open("testfile.smt", "w")) + sat!(open("testfile.smt", "r"), Z3()) + @test status == :SAT # problem is unsatisfiable status = sat!(exprs..., ¬z, solver=Z3()) @@ -131,26 +135,22 @@ end expr1 = a + b + 2 @test smt(expr1, assert=false) == "(declare-fun a () Int) (declare-fun b () Int) -(define-fun add_99dce5c325207b7 () Int (+ 2 a b))\n" +(define-fun add_99dce5c325207b7 () Int (+ a b 2))\n" expr = and(expr1 <= a, b + 1 >= b) result = "(declare-fun b () Int) (declare-fun a () Int) -(define-fun add_f0a93f0b97da1ab2 () Int (+ 1 b)) -(define-fun geq_e1bd460e008a4d8b () Bool (>= add_f0a93f0b97da1ab2 b)) -(define-fun add_99dce5c325207b7 () Int (+ 2 a b)) -(define-fun leq_a64c028ce18b2942 () Bool (<= add_99dce5c325207b7 a)) -(define-fun and_79376630b5dc2f7c () Bool (and geq_e1bd460e008a4d8b leq_a64c028ce18b2942)) -(assert and_79376630b5dc2f7c)\n" +(assert (and (>= (+ b 1) b) (<= (+ a b 2) a)))\n" @test smt(expr) == result - status = sat!(expr) + status = sat!(expr, Z3()) @test status == :SAT @test value(a) == 0 @test value(b) == -2 end +# @testset "Custom solver interactions" begin @satvariable(x[1:3], Bool) @satvariable(y[1:2], Bool) @@ -166,11 +166,52 @@ end # Set up a custom solver that doesn't work (it should be z3) if !Sys.iswindows() # this test doesn't work on Windows, probably because Windows cmd sucks solver = Solver("Z3", `Z3 -smt2 -in`) - @test_throws Base.IOError open_solver(solver) + @test_throws Base.IOError open(solver) end # Interact using send_command - proc, pstdin, pstdout, pstderr = open_solver(Z3()) - output = send_command(pstdin, pstdout, input, is_done=nested_parens_match) - @test output == "sat$line_ending" -end \ No newline at end of file + interactive_solver = open(Z3()) + output = send_command(interactive_solver, input, is_done=is_sat_or_unsat) + @test strip(output) == "sat" + output = send_command(interactive_solver, "(get-model)", is_done=nested_parens_match) + dict = parse_model(output) + @test dict["x_1"] == true && dict["y_1"] == false + + # Pop and push assertion levels + @test isnothing(push!(interactive_solver, 1)) # returns no output + @test isnothing(pop!(interactive_solver, 1)) # returns no output + @test_throws ErrorException push!(interactive_solver, -1) # cannot push negative levels + + # Set and get options + #result = get_option(interactive_solver, "produce-assertions") + #@test result == "true" || result == "false" + #result = set_option(interactive_solver, "incremental", true) + #println("got response $result") + + # Check-sat-assuming + status, assignment = sat!(interactive_solver) + @test status == :SAT + @test assignment["x_1"] == true && assignment["y_1"] == false + + # can assign values returned from sat! + map( (e) -> assign!(e, assignment), exprs) + @test all(value(x) .== [1 1 1]) + @test all(value(y) .== [0 0]) + + # Practical application: Are there more solutions to this problem? + push!(interactive_solver, 1) + assert!(interactive_solver, distinct.(x, value(x))) + status, assignment = sat!(interactive_solver, distinct.(y, value(y))) + # but there isn't one so we get UNSAT + @test status == :UNSAT + # since it failed, we pop the offending assertions off + pop!(interactive_solver, 1) + + # now calling sat gives us the original solution + status, assignment = sat!(interactive_solver) + map( (e) -> assign!(e, assignment), exprs) + @test all(value(x) .== [1 1 1]) + @test all(value(y) .== [0 0]) + + close(interactive_solver) +end diff --git a/test/ufunc_tests.jl b/test/ufunc_tests.jl new file mode 100644 index 0000000..7768ebd --- /dev/null +++ b/test/ufunc_tests.jl @@ -0,0 +1,76 @@ +push!(LOAD_PATH, "../src") +using Satisfiability +using Test + +CLEAR_VARNAMES!() + +@testset "Construct ufuncs" begin + @satvariable(a, Int) + @uninterpreted(p, Int, Bool) + @test smt(p(a), assert=false) == "(declare-fun p(Int) Bool) +(declare-fun a () Int) +(define-fun p_a () Bool (p a))\n" + @test smt(p(a), assert=true) == "(declare-fun p(Int) Bool) +(declare-fun a () Int) +(assert (p a))\n" + @test isa(p(a), BoolExpr) + @test isa(p(-1), BoolExpr) + + @uninterpreted(q, Bool, Int) + @satvariable(z, Bool) + @test isa(q(z), IntExpr) + @test isa(q(true), IntExpr) + + @uninterpreted(r, Real, Real) + @satvariable(s, Real) + @test isa(r(s), RealExpr) + @test isa(r(1.5), RealExpr) + + # ufuncs cannot accept wrong types + @test_throws MethodError s(z) + @test_throws MethodError q(1.5) + @test_throws MethodError p(true) + + @test smt(p(a), assert=false) == "(declare-fun p(Int) Bool) +(declare-fun a () Int) +(define-fun p_a () Bool (p a))\n" + + # this problem is from Clark Barrett's SMT-Switch paper + @satvariable(x, BitVector, 32) + @satvariable(y, BitVector, 32) + x0 = x[1:8] + y0 = y[1:8] + @uninterpreted(f, (BitVector, 32), (BitVector, 32)) + expr = f(x) == f(y) + @test smt(expr) == "(declare-fun f((_ BitVec 32)) (_ BitVec 32)) +(declare-fun x () (_ BitVec 32)) +(declare-fun y () (_ BitVec 32)) +(assert (= (f x) (f y)))\n" + + #Parse ufunc results" + output = "( + (define-fun x () (_ BitVec 32) + #x000000ff) + (define-fun y () (_ BitVec 32) + #x00000000) + (define-fun f ((x!0 (_ BitVec 32))) (_ BitVec 32) + #x00000000) + )" + dict = Satisfiability.parse_model(output) + @test dict["x"] == 0x000000ff && dict["y"] == 0x00000000 && dict["f"](1) == 0 + + # Can assign + assign!(expr, dict) + @test f(x).value == 0 && f(0xff00) == 0 + + # this is the output of the problem "find a function over Bools such that f(f(x)) == x, f(x) == y, x != y. + output = "( +(define-fun x () Bool true) +(define-fun y () Bool false) +(define-fun f ((x!0 Bool)) Bool (ite (= x!0 false) true false) +)" + dict = Satisfiability.parse_model(output) + @test dict["x"] != dict["y"] + @test dict["f"](dict["x"]) == dict["y"] + @test dict["f"](dict["f"](dict["x"])) == dict["x"] +end \ No newline at end of file