Code Monkey home page Code Monkey logo

yices2's Introduction

License: GPL v3 CI Coverity Scan Build Status Coverage Status

Yices 2

Yices 2 is a solver for Satisfiability Modulo Theories (SMT) problems. Yices 2 can process input written in the SMT-LIB language, or in Yices' own specification language. We also provide a C API and bindings for Java, Python, Go, and OCaml.

This repository includes the source of Yices 2, documentation, tests, and examples.

Yices 2 is developed by Bruno Dutertre, Dejan Jovanovic, Stéphane Graham-Lengrand, and Ian A. Mason at the Computer Science Laboratory, SRI International. To contact us, or to get more information about Yices, please visit our website.

Simple Examples

Here are a few typical small examples that illustrate the use of Yices using the SMT2 language.

Linear Real Arithmetic

;; QF_LRA = Quantifier-Free Linear Real Arithmetic
(set-logic QF_LRA)
;; Declare variables x, y
(declare-fun x () Real)
(declare-fun y () Real)
;; Find solution to (x + y > 0), ((x < 0) || (y < 0))
(assert (> (+ x y) 0))
(assert (or (< x 0) (< y 0)))
;; Run a satisfiability check
(check-sat)
;; Print the model
(get-model)

Running Yices on the above problem gives a solution

> yices-smt2 lra.smt2
sat
(model
  (define-fun x () Real 2.0)
  (define-fun y () Real (- 1.0)))

Bit-Vectors

;; QF_BV = Quantifier-Free Bit-Vectors
(set-logic QF_BV)
;; Declare variables
(declare-fun x () (_ BitVec 32))
(declare-fun y () (_ BitVec 32))
;; Find solution to (signed) x > 0, y > 0, x + y < x
(assert (bvsgt x #x00000000))
(assert (bvsgt y #x00000000))
(assert (bvslt (bvadd x y) x))
;; Check
(check-sat)
;; Get the model
(get-model)

Running Yices on the above problem gives

> yices-smt2 bv.smt2
sat
(model
  (define-fun x () (_ BitVec 32) #b01000000000000000000000000000000)
  (define-fun y () (_ BitVec 32) #b01000000000000000000000000000000))

Non-Linear Arithmetic

;; QF_NRA = Quantifier-Free Nonlinear Real Arithmetic
(set-logic QF_NRA)
;; Declare variables
(declare-fun x () Real)
(declare-fun y () Real)
;; Find solution to x^2 + y^2 = 1, x = 2*y, x > 0
(assert (= (+ (* x x) (* y y)) 1))
(assert (= x (* 2 y)))
(assert (> x 0))
;; Check
(check-sat)
;; Get the model
(get-model)

Running Yices on the above problem gives

sat
(model
  (define-fun x () Real 0.894427)
  (define-fun y () Real 0.447214))

Installing Prebuilt Binaries

Currently you can install Yices either using Homebrew or Apt.

Homebrew

Installing on Darwin using homebrew can be achieved via:

brew install SRI-CSL/sri-csl/yices2

This will install the full mcsat-enabled version of Yices, including dynamic library and header files.

Apt

To install Yices on Ubuntu or Debian, do the following:

sudo add-apt-repository ppa:sri-csl/formal-methods
sudo apt-get update
sudo apt-get install yices2

This will install the executables. If you also need the Yices library and header files, replace the last step with:

sudo apt-get install yices2-dev

Building From Source

Prerequisites

To build Yices from the source, you need:

  • GCC version 4.0.x or newer (or clang 3.0 or newer)
  • gperf version 3.0 or newer
  • the GMP library version 4.1 or newer
  • other standard tools: make (gnumake is required), sed, etc.

To build the manual, you also need:

  • a latex installation
  • the latexmk tool

To build the on-line documentation, you need to install the Sphinx python package. The simplest method is:

sudo pip install sphinx

Sphinx 1.4.x or better is needed.

Quick Installation

Do this:

autoconf
./configure
make
sudo make install

This will install binaries and libraries in /usr/local/. You can change the installation location by giving option --prefix=... to the ./configure script.

For more explanations, please check doc/COMPILING.

Support for Non-Linear Arithmetic and MC-SAT

Yices supports non-linear real and integer arithmetic using a method known as Model-Constructing Satisfiability (MC-SAT), but this is not enabled by default. The MC-SAT solver also supports other theories and theory combination. We are currently extending it to handle bit-vector constraints.

If you want the MC-SAT solver, follow these instructions:

  1. Install SRI's library for polynomial manipulation. It's available on github.

  2. Install the CUDD library for binary-decision diagrams. We recommend using the github distribution: https://github.com/ivmai/cudd.

  3. After you've installed libpoly and CUDD, add option --enable-mcsat to the configure command. In details, type this in the toplevel Yices directory:

autoconf
./configure --enable-mcsat
make
sudo make install
  1. You may need to provide LDFLAGS/CPPFLAGS if ./configure fails to find the libpoly or CUDD libraries. Other options may be useful too. Try ./configure --help to see what's there.

Support for Thread Safety

The Yices library is not thread safe by default, if you need a re-entrant version:

autoconf
./configure --enable-thread-safety
make
sudo make install

If configured with --enable-thread-safety the Yices library will be thread safe in the following sense: as long as the creation and manipulation of each context and each model is restricted to a single thread, there should be no races. In particular separate threads can create their own contexts, and manipulate and check them without impeding another thread's progress.

NOTE: --enable-mcsat and --enable-thread-safety are currently incompatible.

Windows Builds

We recommend compiling using Cygwin. If you want a version that works natively on Windows (i.e., does not depend on the Cygwin DLLs), you can compile from Cygwin using the MinGW cross-compilers. This is explained in doc/COMPILING.

Documentation

To build the manual from the source, type

make doc

This will build ./doc/manual/manual.pdf.

Other documentation is in the ./doc directory:

  • doc/COMPILING explains the compilation process and options in detail.
  • doc/NOTES gives an overview of the source code.
  • doc/YICES-LANGUAGE explains the syntax of the Yices language, and describes commands, functions, and heuristic parameters.

To build the Sphinx documentation:

cd doc/sphinx
make html

This will build the documentation in build/html (within directory doc/sphinx). You can also do:

make epub

and you'll have the doc in build/epub/Yices.epub.

Getting Help and Reporting bugs

For further questions about Yices, please contact us via the Yices mailing lists [email protected]. This mailing list is moderated, but you do not need to register to post to it. You can register to this mailing list if you are interested in helping others.

Please submit bug reports through GitHub issues. Please include enough information in your bug report to enable us to reproduce and fix the problem. This is an example of a good report:

I am experiencing a segmentation fault from Yices. The following is a small test case that causes the crash. I am using Yices 2.4.1 on x86_64 statically linked against GMP on Ubuntu 12.04.

This is an example of a poor bug report:

I have just downloaded Yices. After I compile my code and link it with Yices, there is a segmentation fault when I run the executable. Can you help?

Please try to include answers to the following questions:

  • Which version of Yices are you using?
  • On which hardware and OS?
  • How can we reproduce the bug? If possible, include an input file or program fragment.

yices2's People

Contributors

ahmed-irfan avatar alnsn avatar aman-goel avatar aniemetz avatar arjenroodselaar avatar barracuda156 avatar boqwxp avatar brunodutertre avatar caballa avatar dddejan avatar disteph avatar hliebel avatar ianamason avatar jamesjer avatar kquick avatar markpmitchell avatar nevilad avatar ovascos avatar saloed avatar samowre avatar trofi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yices2's Issues

Assertion failure in arithmetic internalize

Running

./build/x86_64-unknown-linux-gnu-debug/bin/yices_smt2 error2.smt

yices_smt2: context.c:498: map_conditional_to_arith: Assertion `v == null_thvar' failed.

Trace

Program received signal SIGABRT, Aborted.
0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
0000001 0x00007ffff77e5b8b in __GI_abort () at abort.c:91
0000002 0x00007ffff77db0ee in __assert_fail_base (fmt=<optimized out>, assertion=0x58c965 "v == null_thvar", file=0x58c778 "context.c",
    line=<optimized out>, function=<optimized out>) at assert.c:94
0000003 0x00007ffff77db192 in __GI___assert_fail (assertion=0x58c965 "v == null_thvar", file=0x58c778 "context.c", line=498,
    function=0x58e620 "map_conditional_to_arith") at assert.c:103
0000004 0x000000000045c196 in map_conditional_to_arith (ctx=0x84eef0, c=0x858628, is_int=true) at context.c:498
0000005 0x000000000045c3ca in map_ite_to_arith (ctx=0x84eef0, ite=0x84cd80, is_int=true) at context.c:548
0000006 0x000000000045efae in internalize_to_arith (ctx=0x84eef0, t=36) at context.c:1786
0000007 0x00000000004608f1 in try_arithvar_elim (ctx=0x84eef0, p=0x84d4a0, all_int=true) at context.c:2423
0000008 0x0000000000461a91 in assert_toplevel_arith_eq (ctx=0x84eef0, t=186, tt=true) at context.c:2965
0000009 0x0000000000462947 in assert_toplevel_formula (ctx=0x84eef0, t=188) at context.c:3375
0000010 0x0000000000464c7b in context_process_assertions (ctx=0x84eef0, n=1, a=0x84eeb0) at context.c:4526
0000011 0x0000000000464e5d in assert_formulas (ctx=0x84eef0, n=1, f=0x84eeb0) at context.c:4606
0000012 0x000000000042096e in yices_assert_formulas (ctx=0x84eef0, n=1, t=0x84eeb0) at yices_api.c:6057
0000013 0x000000000042cc46 in check_delayed_assertions (g=0x82c960) at smt2_commands.c:2435
0000014 0x000000000042ef44 in smt2_check_sat () at smt2_commands.c:3783
0000015 0x0000000000435b5e in eval_smt2_check_sat (stack=0x82b9a0, f=0x846bd0, n=0) at smt2_term_stack.c:789
0000016 0x000000000040fa86 in tstack_eval (stack=0x82b9a0) at term_stack2.c:4974
0000017 0x0000000000432125 in smt2_parse (parser=0x82b980, start=c0) at smt2_parser.c:252
0000018 0x0000000000433084 in parse_smt2_command (parser=0x82b980) at smt2_parser.c:821
0000019 0x0000000000402e24 in main (argc=2, argv=0x7fffffffe9d8) at yices_smt2.c:323

Assertions failure in bitvectors

Running

./build/x86_64-unknown-linux-gnu-debug/bin/yices_smt2 ~/fuzzsmt/votesmt-0.1/errors/QF_BV/yices2_to_check/error1.smt
yices_smt2: bit_term_conversion.c:66: convert_term_to_bit: Assertion `bit_is_pos(x)' failed.

Trace

Program received signal SIGABRT, Aborted.
0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
0000001 0x00007ffff77e5b8b in __GI_abort () at abort.c:91
0000002 0x00007ffff77db0ee in __assert_fail_base (fmt=<optimized out>, assertion=0x5ad029 "bit_is_pos(x)", file=0x5acfd2 "bit_term_conversion.c",
    line=<optimized out>, function=<optimized out>) at assert.c:94
0000003 0x00007ffff77db192 in __GI___assert_fail (assertion=0x5ad029 "bit_is_pos(x)", file=0x5acfd2 "bit_term_conversion.c", line=66,
    function=0x5ad160 "convert_term_to_bit") at assert.c:103
0000004 0x000000000051b9e5 in convert_term_to_bit (table=0x82bca0, nodes=0x84c730, t=585, n=1) at bit_term_conversion.c:66
0000005 0x0000000000449ea9 in bvlogic_buffer_set_term_array (b=0x8540b0, table=0x82bca0, n=1, a=0x852cd4) at bvlogic_buffers.c:282
0000006 0x000000000044c2bc in bvlogic_buffer_set_term (b=0x8540b0, table=0x82bca0, t=586) at bvlogic_buffers.c:1338
0000007 0x0000000000409669 in bvl_set_elem (stack=0x82b9a0, b=0x8540b0, e=0x847930) at term_stack2.c:2245
0000008 0x000000000040ce7e in mk_bv_sign_extend_core (stack=0x82b9a0, bv=0x847930, idx=0x847910) at term_stack2.c:3736
0000009 0x00000000004347c5 in eval_smt2_mk_bv_sign_extend (stack=0x82b9a0, f=0x847910, n=2) at smt2_term_stack.c:234
0000010 0x000000000040fa86 in tstack_eval (stack=0x82b9a0) at term_stack2.c:4974
0000011 0x0000000000432125 in smt2_parse (parser=0x82b980, start=c0) at smt2_parser.c:252
0000012 0x0000000000433084 in parse_smt2_command (parser=0x82b980) at smt2_parser.c:821
0000013 0x0000000000402e24 in main (argc=2, argv=0x7fffffffe9d8) at yices_smt2.c:323

Bug in QF_AUFLIA

Yices gives unsat on the following example (reported by Martin Gabris).
Should be sat.

(set-option :produce-models true)
(set-logic QF_AUFLIA)
(declare-fun S0 () (Array Int Int))
(declare-fun S1 () (Array Int Int))
(declare-fun z () Int)
(assert (>= z 0))
(assert (< z 4))
(assert  (and (= (select S0 0) 0) (and (= (select S0 1) 1) (and (= (select S0 2) 2) (= (select S0 3) 3)))))  
(assert (= S1 (store S0 1 1)))
(assert (= z (select S1 2)))
(check-sat)
(get-value (z))
; it should be 2
(exit)

Bug in internalization of (mod x k)

When either x or k is not a integer, then (mod x k) has type real.
Function map_mod_to_arith does not do it properly. This bug
was reported by Lifan Su. It's triggered by the following example:

(define x::real)
(assert (> (mod x 2) 0.1))
(assert (< (mod x 2) 0.3))

Yices says unsat after the second assert.

Incorrect bitblasting afer (reset)

Something is not reset properly in the bitvector solver. This causes incorrect result after (reset). Bug reported by Robert Dockins.

Run Yices on yices.bug3. It will print 'sat' and give a model after the (reset). The correct answer is 'unsat' (as shown by yices.bug1 and yices.bug2).

Strange case of infinite loop in the build system

I was building yices 2.4.0 from source on OS X 10.11.1. I have gmp installed under /usr/local, so I need to set compiler flags. If I forget to set LDFLAGS=-L/usr/local/lib the build fails with a good message. On the other hand, if I remember to set LDFLAGS, but forget to set CPPFLAGS=-I/usr/local/include, the make command 1) builds dependencies, 2) echo's "gmp.h not found", 3) repeats, starting from 1.

I only noticed this after letting it build for ~3 hours and coming back to find it was still building dependencies.

Full set of steps is:

$ cd yices-2.4.0
$ export LDFLAGS=-L/usr/local/lib
$ ./configure
... [OK]
$ make
... [loops forever?]

Valgrind issue

There is an issue running sally with Yices that I've noticed while doing travis builds (many crashes). This might be in sally but I'm adding it here for reference. Many tests break in make check (yices in debug build), and when running valgrind on one of them

dejan@raven:~/workspace/sally/build$ valgrind  ./src/sally -v 1 --engine bmc --bmc-max=20 ../test/regress/bmc/beem/elevator_planning.1.prop1-func-interl.btor
==19952== Memcheck, a memory error detector
==19952== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==19952== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==19952== Command: ./src/sally -v 1 --engine bmc --bmc-max=20 ../test/regress/bmc/beem/elevator_planning.1.prop1-func-interl.btor
==19952== 
[2015-06-23.21:14:31] Processing ../test/regress/bmc/beem/elevator_planning.1.prop1-func-interl.btor
[2015-06-23.21:14:32] BMC: checking 0
[2015-06-23.21:14:32] BMC: got unsat
[2015-06-23.21:14:32] BMC: checking 1
[2015-06-23.21:14:32] BMC: got unsat
[2015-06-23.21:14:32] BMC: checking 2
[2015-06-23.21:14:33] BMC: got unsat
[2015-06-23.21:14:33] BMC: checking 3
[2015-06-23.21:14:34] BMC: got unsat
[2015-06-23.21:14:34] BMC: checking 4
[2015-06-23.21:14:34] BMC: got unsat
[2015-06-23.21:14:34] BMC: checking 5
[2015-06-23.21:14:35] BMC: got unsat
[2015-06-23.21:14:35] BMC: checking 6
[2015-06-23.21:14:36] BMC: got unsat
[2015-06-23.21:14:37] BMC: checking 7
[2015-06-23.21:14:38] BMC: got unsat
[2015-06-23.21:14:38] BMC: checking 8
[2015-06-23.21:14:40] BMC: got unsat
[2015-06-23.21:14:40] BMC: checking 9
[2015-06-23.21:14:42] BMC: got unsat
[2015-06-23.21:14:43] BMC: checking 10
[2015-06-23.21:14:46] BMC: got unsat
[2015-06-23.21:14:47] BMC: checking 11
[2015-06-23.21:14:53] BMC: got unsat
[2015-06-23.21:14:53] BMC: checking 12
[2015-06-23.21:15:04] BMC: got unsat
[2015-06-23.21:15:05] BMC: checking 13
[2015-06-23.21:15:25] BMC: got unsat
[2015-06-23.21:15:26] BMC: checking 14
[2015-06-23.21:16:10] BMC: got unsat
[2015-06-23.21:16:10] BMC: checking 15
[2015-06-23.21:16:39] BMC: got sat
==19952== Use of uninitialised value of size 8
==19952==    at 0x4FE3AF8: int_htbl_get_obj (int_hash_tables.c:314)
==19952==    by 0x4EB9B38: vtbl_mk_bv (concrete_values.c:1795)
==19952==    by 0x4EC8436: eval_bv_array (model_eval.c:395)
==19952==    by 0x4ECA76D: eval_term (model_eval.c:1240)
==19952==    by 0x4EC995B: eval_ite (model_eval.c:857)
==19952==    by 0x4ECA53F: eval_term (model_eval.c:1181)
==19952==    by 0x4EC995B: eval_ite (model_eval.c:857)
==19952==    by 0x4ECA53F: eval_term (model_eval.c:1181)
==19952==    by 0x4EC847F: eval_bit (model_eval.c:407)
==19952==    by 0x4ECA99C: eval_term (model_eval.c:1292)
==19952==    by 0x4EC83E1: eval_bv_array (model_eval.c:391)
==19952==    by 0x4ECA76D: eval_term (model_eval.c:1240)
==19952== 
==19952== Use of uninitialised value of size 8
==19952==    at 0x4FE3B35: int_htbl_get_obj (int_hash_tables.c:317)
==19952==    by 0x4EB9B38: vtbl_mk_bv (concrete_values.c:1795)
==19952==    by 0x4EC8436: eval_bv_array (model_eval.c:395)
==19952==    by 0x4ECA76D: eval_term (model_eval.c:1240)
==19952==    by 0x4EC995B: eval_ite (model_eval.c:857)
==19952==    by 0x4ECA53F: eval_term (model_eval.c:1181)
==19952==    by 0x4EC995B: eval_ite (model_eval.c:857)
==19952==    by 0x4ECA53F: eval_term (model_eval.c:1181)
==19952==    by 0x4EC847F: eval_bit (model_eval.c:407)
==19952==    by 0x4ECA99C: eval_term (model_eval.c:1292)
==19952==    by 0x4EC83E1: eval_bv_array (model_eval.c:391)
==19952==    by 0x4ECA76D: eval_term (model_eval.c:1240)
==19952== 
==19952== Conditional jump or move depends on uninitialised value(s)
==19952==    at 0x4FE3B3A: int_htbl_get_obj (int_hash_tables.c:317)
==19952==    by 0x4EB9B38: vtbl_mk_bv (concrete_values.c:1795)
==19952==    by 0x4EC8436: eval_bv_array (model_eval.c:395)
==19952==    by 0x4ECA76D: eval_term (model_eval.c:1240)
==19952==    by 0x4EC995B: eval_ite (model_eval.c:857)
==19952==    by 0x4ECA53F: eval_term (model_eval.c:1181)
==19952==    by 0x4EC995B: eval_ite (model_eval.c:857)
==19952==    by 0x4ECA53F: eval_term (model_eval.c:1181)
==19952==    by 0x4EC847F: eval_bit (model_eval.c:407)
==19952==    by 0x4ECA99C: eval_term (model_eval.c:1292)
==19952==    by 0x4EC83E1: eval_bv_array (model_eval.c:391)
==19952==    by 0x4ECA76D: eval_term (model_eval.c:1240)
==19952== 
==19952== Conditional jump or move depends on uninitialised value(s)
==19952==    at 0x4F94B2B: bvconst_eq (bv_constants.c:1578)
==19952==    by 0x4EB8E5D: equal_bv_value (concrete_values.c:1414)
==19952==    by 0x4FE3B51: int_htbl_get_obj (int_hash_tables.c:317)
==19952==    by 0x4EB9B38: vtbl_mk_bv (concrete_values.c:1795)
==19952==    by 0x4EC8436: eval_bv_array (model_eval.c:395)
==19952==    by 0x4ECA76D: eval_term (model_eval.c:1240)
==19952==    by 0x4EC995B: eval_ite (model_eval.c:857)
==19952==    by 0x4ECA53F: eval_term (model_eval.c:1181)
==19952==    by 0x4EC995B: eval_ite (model_eval.c:857)
==19952==    by 0x4ECA53F: eval_term (model_eval.c:1181)
==19952==    by 0x4EC847F: eval_bit (model_eval.c:407)
==19952==    by 0x4ECA99C: eval_term (model_eval.c:1292)
==19952== 
==19952== Use of uninitialised value of size 8
==19952==    at 0x4FE3A34: int_htbl_store_new_obj (int_hash_tables.c:283)
==19952==    by 0x4FE3B1A: int_htbl_get_obj (int_hash_tables.c:315)
==19952==    by 0x4EB9B38: vtbl_mk_bv (concrete_values.c:1795)
==19952==    by 0x4EC8436: eval_bv_array (model_eval.c:395)
==19952==    by 0x4ECA76D: eval_term (model_eval.c:1240)
==19952==    by 0x4ECA1FE: eval_uninterpreted (model_eval.c:1085)
==19952==    by 0x4ECA409: eval_term (model_eval.c:1149)
==19952==    by 0x4ECAB94: eval_in_model (model_eval.c:1355)
==19952==    by 0x4ECAE2C: model_get_term_value (model_queries.c:36)
==19952==    by 0x4E62A0A: yices_get_bv_value (yices_api.c:8000)
==19952==    by 0x4E5B01: sally::smt::yices2_internal::get_model(sally::expr::model&, std::set<sally::expr::term_ref, std::less<sally::expr::term_ref>, std::allocator<sally::expr::term_ref> > const&, std::set<sally::expr::term_ref, std::less<sally::expr::term_ref>, std::allocator<sally::expr::term_ref> > const&) (yices2_internal.cpp:815)
==19952==    by 0x48AFD2: sally::bmc::bmc_engine::query(sally::system::transition_system const*, sally::system::state_formula const*) (bmc_engine.cpp:91)
==19952== 
==19952== Use of uninitialised value of size 8
==19952==    at 0x4FE3A3D: int_htbl_store_new_obj (int_hash_tables.c:284)
==19952==    by 0x4FE3B1A: int_htbl_get_obj (int_hash_tables.c:315)
==19952==    by 0x4EB9B38: vtbl_mk_bv (concrete_values.c:1795)
==19952==    by 0x4EC8436: eval_bv_array (model_eval.c:395)
==19952==    by 0x4ECA76D: eval_term (model_eval.c:1240)
==19952==    by 0x4ECA1FE: eval_uninterpreted (model_eval.c:1085)
==19952==    by 0x4ECA409: eval_term (model_eval.c:1149)
==19952==    by 0x4ECAB94: eval_in_model (model_eval.c:1355)
==19952==    by 0x4ECAE2C: model_get_term_value (model_queries.c:36)
==19952==    by 0x4E62A0A: yices_get_bv_value (yices_api.c:8000)
==19952==    by 0x4E5B01: sally::smt::yices2_internal::get_model(sally::expr::model&, std::set<sally::expr::term_ref, std::less<sally::expr::term_ref>, std::allocator<sally::expr::term_ref> > const&, std::set<sally::expr::term_ref, std::less<sally::expr::term_ref>, std::allocator<sally::expr::term_ref> > const&) (yices2_internal.cpp:815)
==19952==    by 0x48AFD2: sally::bmc::bmc_engine::query(sally::system::transition_system const*, sally::system::state_formula const*) (bmc_engine.cpp:91)
...

Assertions failure in bitvectors

Run

./build/x86_64-unknown-linux-gnu-debug/bin/yices_smt2 ~/fuzzsmt/votesmt-0.1/errors/QF_BV/yices2_to_check/error1.smt

yices_smt2: bvpoly_dag.c:2157: bvc_dag_reduce_sum: Assertion `0 < r1 && r1 <= dag->nelems && 0 < r2 && r2 <= dag->nelems && r1 != r2' failed.

Trace

Program received signal SIGABRT, Aborted.
0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
0000001 0x00007ffff77e5b8b in __GI_abort () at abort.c:91
0000002 0x00007ffff77db0ee in __assert_fail_base (fmt=<optimized out>,
    assertion=0x5be2e8 "0 < r1 && r1 <= dag->nelems && 0 < r2 && r2 <= dag->nelems && r1 != r2", file=0x5bdd97 "bvpoly_dag.c",
    line=<optimized out>, function=<optimized out>) at assert.c:94
0000003 0x00007ffff77db192 in __GI___assert_fail (assertion=0x5be2e8 "0 < r1 && r1 <= dag->nelems && 0 < r2 && r2 <= dag->nelems && r1 != r2",
    file=0x5bdd97 "bvpoly_dag.c", line=2157, function=0x5be8c0 "bvc_dag_reduce_sum") at assert.c:103
0000004 0x000000000057bfa3 in bvc_dag_reduce_sum (dag=0x885b50, n=10, n1=4, n2=5) at bvpoly_dag.c:2157
0000005 0x00000000005765b1 in bvc_process_elem_sum (c=0x885b10, i=5, d=0x8ac710) at bvpoly_compiler.c:956
0000006 0x00000000005766a8 in bvc_process_elem_node (c=0x885b10, i=5) at bvpoly_compiler.c:977
0000007 0x0000000000576c1e in bv_compiler_convert_elem_nodes (c=0x885b10) at bvpoly_compiler.c:1190
0000008 0x0000000000576f53 in bv_compiler_process_queue (c=0x885b10) at bvpoly_compiler.c:1305
0000009 0x0000000000520012 in bv_solver_compile_polynomials (solver=0x860b20) at bvsolver.c:916
0000010 0x0000000000521ddc in bv_solver_bitblast (solver=0x860b20) at bvsolver.c:1698
0000011 0x000000000052bee9 in bv_solver_start_search (solver=0x860b20) at bvsolver.c:6375
0000012 0x00000000004dc1d7 in start_search (s=0x8602f0) at smt_core.c:5539
0000013 0x000000000046db89 in solve (core=0x8602f0, params=0x82e340) at context_solver.c:256
0000014 0x000000000046e0c3 in check_context (ctx=0x85fdf0, params=0x82e340) at context_solver.c:408
0000015 0x000000000042cded in check_delayed_assertions (g=0x82e960) at smt2_commands.c:2452
0000016 0x000000000042f09b in smt2_check_sat () at smt2_commands.c:3786
0000017 0x0000000000435cb6 in eval_smt2_check_sat (stack=0x82d9a0, f=0x870170, n=0) at smt2_term_stack.c:789
0000018 0x000000000040fbba in tstack_eval (stack=0x82d9a0) at term_stack2.c:4974
0000019 0x000000000043227d in smt2_parse (parser=0x82d980, start=c0) at smt2_parser.c:252
0000020 0x00000000004331dc in parse_smt2_command (parser=0x82d980) at smt2_parser.c:821
0000021 0x0000000000402f58 in main (argc=2, argv=0x7fffffffe9d8) at yices_smt2.c:325

Possible wrong answer in QF_AUFBV (unsat instead of sat)

On the following benchmark cvc4 and z3 report "sat" while yices reports "unsat". Possibly due to large vector sizes.

(set-info :source |fuzzsmt|)
(set-info :smt-lib-version 2.0)
(set-info :category "random")
(set-info :status unknown)
(set-logic QF_AUFBV)
(declare-fun v0 () (_ BitVec 89))
(declare-fun a1 () (Array  (_ BitVec 45)  (_ BitVec 39)))
(declare-fun a2 () (Array  (_ BitVec 42)  (_ BitVec 64)))
(declare-fun a3 () (Array  (_ BitVec 126)  (_ BitVec 66)))
(assert (let ((e4(_ bv4967643992788789069434586128412165 115)))
(let ((e5 (bvmul e4 ((_ sign_extend 26) v0))))
(let ((e6 (store a2 ((_ extract 64 23) v0) ((_ extract 84 21) e5))))
(let ((e7 (select a2 ((_ extract 59 18) v0))))
(let ((e8 (select a2 ((_ extract 81 40) e5))))
(let ((e9 (select a3 ((_ sign_extend 62) e7))))
(let ((e10 (select a2 ((_ extract 44 3) v0))))
(let ((e11 (bvmul e9 e9)))
(let ((e12 (bvxor e4 ((_ sign_extend 49) e11))))
(let ((e13 (ite (= e5 ((_ zero_extend 49) e11)) (_ bv1 1) (_ bv0 1))))
(let ((e14 (ite (bvsge e7 e8) (_ bv1 1) (_ bv0 1))))
(let ((e15 ((_ extract 53 48) e10)))
(let ((e16 (bvsrem ((_ zero_extend 26) v0) e12)))
(let ((e17 (bvuge e7 e8)))
(let ((e18 (bvule e14 e14)))
(let ((e19 (distinct ((_ zero_extend 49) e11) e4)))
(let ((e20 (bvuge e5 ((_ sign_extend 51) e8))))
(let ((e21 (bvsle e8 ((_ zero_extend 58) e15))))
(let ((e22 (bvslt e12 ((_ zero_extend 26) v0))))
(let ((e23 (distinct e16 ((_ zero_extend 26) v0))))
(let ((e24 (bvslt ((_ sign_extend 25) e8) v0)))
(let ((e25 (bvsge e4 ((_ zero_extend 49) e11))))
(let ((e26 (bvslt e5 e16)))
(let ((e27 (bvule e16 ((_ zero_extend 51) e8))))
(let ((e28 (bvuge e16 e4)))
(let ((e29 (bvsgt e12 ((_ zero_extend 26) v0))))
(let ((e30 (bvslt e5 e16)))
(let ((e31 (bvsge e16 ((_ sign_extend 51) e10))))
(let ((e32 (bvsle ((_ sign_extend 26) v0) e12)))
(let ((e33 (bvsge e9 ((_ sign_extend 60) e15))))
(let ((e34 (bvsle ((_ sign_extend 60) e15) e9)))
(let ((e35 (bvsge e16 e4)))
(let ((e36 (bvsge ((_ sign_extend 49) e9) e4)))
(let ((e37 (bvsge e11 ((_ sign_extend 65) e14))))
(let ((e38 (bvugt e10 e7)))
(let ((e39 (bvuge e15 ((_ sign_extend 5) e14))))
(let ((e40 (bvsle ((_ sign_extend 51) e8) e5)))
(let ((e41 (distinct e5 ((_ sign_extend 109) e15))))
(let ((e42 (bvsge e11 e9)))
(let ((e43 (bvugt ((_ zero_extend 51) e8) e16)))
(let ((e44 (bvule ((_ sign_extend 65) e14) e11)))
(let ((e45 (bvuge ((_ zero_extend 2) e7) e9)))
(let ((e46 (bvuge e4 e12)))
(let ((e47 (bvsle ((_ zero_extend 25) e7) v0)))
(let ((e48 (bvsgt e8 e8)))
(let ((e49 (bvsgt e4 ((_ zero_extend 114) e13))))
(let ((e50 (=> e20 e41)))
(let ((e51 (ite e30 e35 e22)))
(let ((e52 (not e38)))
(let ((e53 (xor e44 e37)))
(let ((e54 (xor e46 e18)))
(let ((e55 (and e40 e52)))
(let ((e56 (xor e55 e49)))
(let ((e57 (not e36)))
(let ((e58 (and e21 e29)))
(let ((e59 (=> e24 e23)))
(let ((e60 (or e59 e34)))
(let ((e61 (or e45 e47)))
(let ((e62 (xor e39 e58)))
(let ((e63 (xor e56 e48)))
(let ((e64 (or e60 e63)))
(let ((e65 (not e51)))
(let ((e66 (ite e33 e64 e54)))
(let ((e67 (or e57 e17)))
(let ((e68 (not e67)))
(let ((e69 (and e32 e26)))
(let ((e70 (xor e62 e50)))
(let ((e71 (= e25 e31)))
(let ((e72 (or e70 e65)))
(let ((e73 (and e27 e19)))
(let ((e74 (or e42 e73)))
(let ((e75 (and e28 e43)))
(let ((e76 (ite e69 e72 e68)))
(let ((e77 (=> e66 e66)))
(let ((e78 (and e77 e61)))
(let ((e79 (or e74 e78)))
(let ((e80 (and e76 e71)))
(let ((e81 (and e80 e75)))
(let ((e82 (xor e53 e53)))
(let ((e83 (or e79 e79)))
(let ((e84 (= e82 e83)))
(let ((e85 (xor e81 e84)))
(let ((e86 (and e85 (not (= e12 (_ bv0 115))))))
(let ((e87 (and e86 (not (= e12 (bvnot (_ bv0 115)))))))
e87
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

(check-sat)

Assertions failure in bitvectors (try_reduce_sum: Assertion `k1 < 0' failed)

Bit-vectors fail an assert on benchmark

../solvers/yices2_to_check QF_BV/yices2_to_check/error1.smt
yices2_to_check: solvers/bv/bvpoly_dag.c:2242: try_reduce_sum: Assertion `k1 < 0' failed.

Trace

0000004 0x0000000000530111 in try_reduce_sum (n2=6, n1=4, n=<optimized out>, h=12, i=<optimized out>, dag=0x8f4180) at solvers/bv/bvpoly_dag.c:2242
0000005 bvc_dag_reduce_sum (dag=0x8f4180, n=<optimized out>, n1=4, n2=6) at solvers/bv/bvpoly_dag.c:2302
0000006 0x000000000052a2a4 in bvc_process_elem_sum (d=0x905380, i=7, c=0x8f4140) at solvers/bv/bvpoly_compiler.c:995
0000007 bvc_process_elem_node (c=0x8f4140, i=7) at solvers/bv/bvpoly_compiler.c:1031
0000008 0x000000000052b074 in bv_compiler_convert_elem_nodes (c=<optimized out>) at solvers/bv/bvpoly_compiler.c:1245
0000009 bv_compiler_process_queue (c=<optimized out>) at solvers/bv/bvpoly_compiler.c:1360
0000010 0x0000000000460c4d in bv_solver_bitblast (solver=0x8eacb0) at solvers/bv/bvsolver.c:1705
0000011 0x0000000000460fb1 in bv_solver_start_search (solver=0x8eacb0) at solvers/bv/bvsolver.c:6381
0000012 0x0000000000424595 in solve (params=0x8bb7c0, core=0x8ea4b0) at context/context_solver.c:271
0000013 check_context (ctx=0x8e6cc0, params=0x8bb7c0) at context/context_solver.c:423
0000014 0x00000000004fa75c in check_delayed_assertions (g=<optimized out>) at frontend/smt2/smt2_commands.c:2343
0000015 smt2_check_sat () at frontend/smt2/smt2_commands.c:3687
0000016 0x00000000005001d9 in eval_smt2_check_sat (stack=0x8bad00, f=<optimized out>, n=<optimized out>) at frontend/smt2/smt2_term_stack.c:796
0000017 0x00000000004fdf1a in smt2_parse (parser=0x8baea0, start=c0) at frontend/smt2/smt2_parser.c:259
0000018 0x0000000000404bea in main (argc=<optimized out>, argv=<optimized out>) at frontend/yices_smt2.c:331

(error "context exception") on a QF_IDL problem

The problem

(set-info :source |fuzzsmt|)
(set-info :smt-lib-version 2.0)
(set-info :category "random")
(set-info :status unknown)
(set-logic QF_IDL)
(declare-fun v0 () Int)
(declare-fun v1 () Int)
(assert (let ((e2 61895))
(let ((e3 329848102180743))
(let ((e4 764349))
(let ((e5 23463))
(let ((e6 2))
(let ((e7 6))
(let ((e8 (< v0 v1)))
(let ((e9 (distinct (- v0 v0) e3)))
(let ((e10 (= (- v1 v1) e7)))
(let ((e11 (= v0 v0)))
(let ((e12 (>= (- v0 v1) e6)))
(let ((e13 (>= (- v0 v1) e7)))
(let ((e14 (<= v0 v0)))
(let ((e15 (> (- v0 v0) (- e2))))
(let ((e16 (>= v0 v0)))
(let ((e17 (<= v0 v0)))
(let ((e18 (= (- v1 v1) (- e2))))
(let ((e19 (distinct (- v1 v0) e3)))
(let ((e20 (> (- v1 v1) e4)))
(let ((e21 (> v1 v1)))
(let ((e22 (<= (- v1 v0) (- e4))))
(let ((e23 (< (- v1 v0) (- e6))))
(let ((e24 (<= (- v0 v1) (- e4))))
(let ((e25 (>= (- v1 v0) (- e4))))
(let ((e26 (< v0 v1)))
(let ((e27 (> (- v0 v1) (- e3))))
(let ((e28 (distinct v1 v1)))
(let ((e29 (distinct (- v0 v0) (- e3))))
(let ((e30 (< v0 v0)))
(let ((e31 (< (- v1 v0) (- e7))))
(let ((e32 (>= v0 v0)))
(let ((e33 (< (- v1 v1) e4)))
(let ((e34 (<= (- v1 v0) (- e4))))
(let ((e35 (= (- v1 v0) (- e5))))
(let ((e36 (> v0 v0)))
(let ((e37 (> v0 v0)))
(let ((e38 (< v1 v1)))
(let ((e39 (>= (- v1 v1) (- e4))))
(let ((e40 (= v0 v1)))
(let ((e41 (distinct v1 v0)))
(let ((e42 (< v0 v0)))
(let ((e43 (< v1 v1)))
(let ((e44 (< (- v0 v1) (- e4))))
(let ((e45 (= (- v0 v0) e2)))
(let ((e46 (<= (- v1 v0) (- e5))))
(let ((e47 (distinct (- v0 v1) e2)))
(let ((e48 (>= (- v0 v0) e4)))
(let ((e49 (< v1 v0)))
(let ((e50 (> v0 v1)))
(let ((e51 (> v0 v1)))
(let ((e52 (distinct (- v1 v1) e5)))
(let ((e53 (distinct (- v1 v1) (- e2))))
(let ((e54 (<= (- v1 v1) (- e4))))
(let ((e55 (< (- v0 v1) e4)))
(let ((e56 (= (- v0 v0) e5)))
(let ((e57 (= v0 v0)))
(let ((e58 (= (- v1 v0) (- e4))))
(let ((e59 (> v1 v1)))
(let ((e60 (distinct v1 v0)))
(let ((e61 (distinct (- v0 v0) (- e7))))
(let ((e62 (ite e25 e46 e56)))
(let ((e63 (and e51 e53)))
(let ((e64 (=> e47 e10)))
(let ((e65 (= e43 e52)))
(let ((e66 (=> e31 e65)))
(let ((e67 (= e24 e13)))
(let ((e68 (= e28 e38)))
(let ((e69 (or e39 e30)))
(let ((e70 (and e64 e55)))
(let ((e71 (=> e11 e29)))
(let ((e72 (or e69 e21)))
(let ((e73 (= e22 e49)))
(let ((e74 (or e33 e18)))
(let ((e75 (not e67)))
(let ((e76 (xor e15 e74)))
(let ((e77 (xor e14 e71)))
(let ((e78 (= e36 e23)))
(let ((e79 (= e34 e58)))
(let ((e80 (and e68 e62)))
(let ((e81 (=> e50 e63)))
(let ((e82 (not e42)))
(let ((e83 (not e77)))
(let ((e84 (ite e45 e16 e60)))
(let ((e85 (= e76 e82)))
(let ((e86 (= e84 e80)))
(let ((e87 (or e85 e12)))
(let ((e88 (xor e83 e70)))
(let ((e89 (ite e66 e17 e48)))
(let ((e90 (ite e79 e27 e86)))
(let ((e91 (and e73 e44)))
(let ((e92 (ite e81 e87 e87)))
(let ((e93 (ite e32 e72 e78)))
(let ((e94 (ite e90 e40 e59)))
(let ((e95 (xor e19 e75)))
(let ((e96 (ite e95 e94 e94)))
(let ((e97 (=> e35 e93)))
(let ((e98 (and e26 e61)))
(let ((e99 (xor e8 e37)))
(let ((e100 (and e20 e92)))
(let ((e101 (= e41 e88)))
(let ((e102 (xor e54 e57)))
(let ((e103 (or e91 e9)))
(let ((e104 (and e89 e101)))
(let ((e105 (=> e100 e103)))
(let ((e106 (not e97)))
(let ((e107 (and e106 e105)))
(let ((e108 (= e107 e102)))
(let ((e109 (=> e98 e98)))
(let ((e110 (xor e104 e104)))
(let ((e111 (ite e99 e108 e109)))
(let ((e112 (and e111 e96)))
(let ((e113 (or e112 e110)))
e113
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

(check-sat)

Bug found by Andrew Gacek

Yices 2.4.0 gives a wrong answer on this input:

(set-option :produce-models true)
(set-logic QF_LIA)
(define-fun T ((%init Bool) ($left$0 Int) ($right$0 Int) ($head$0 Int) ($write$0 Int) ($move$0 Int) ($state$0 Int) ($cex$0 Bool) ($left$1 Int) ($right$1 Int) ($head$1 Int) ($write$1 Int) ($move$1 Int) ($state$1 Int) ($cex$1 Bool)) Bool 
    (and (= $left$1 (ite %init 0 (ite (= $state$0 0) $left$0 (ite (= $move$1 0) (div $left$0 10) (+ (* 10 $left$0) $write$1))))) 
         (= $head$1 (ite %init 0 (ite (= $state$0 0) $head$0 (ite (= $move$1 0) (mod $left$0 10) (mod $right$0 10))))) 
         (= $right$1 (ite %init 0 (ite (= $state$0 0) $right$0 (ite (= $move$1 0) (+ (* 10 $right$0) $write$1) (div $right$0 10)))))
         (= $write$1 (ite %init 0 (ite (and (= $state$0 1) (= $head$0 0)) 1 (ite (and (= $state$0 1) (= $head$0 1)) 1 (ite (and (= $state$0 2) (= $head$0 0)) 1 (ite (and (= $state$0 2) (= $head$0 1)) 0 (ite (and (= $state$0 3) (= $head$0 0)) 1 (ite (and (= $state$0 3) (= $head$0 1)) 1 (ite (and (= $state$0 4) (= $head$0 0)) 1 (ite (and (= $state$0 4) (= $head$0 1)) 0 0)))))))))) 
         (= $move$1 (ite %init 0 (ite (and (= $state$0 1) (= $head$0 0)) 1 (ite (and (= $state$0 1) (= $head$0 1)) 0 (ite (and (= $state$0 2) (= $head$0 0)) 0 (ite (and (= $state$0 2) (= $head$0 1)) 0 (ite (and (= $state$0 3) (= $head$0 0)) 1 (ite (and (= $state$0 3) (= $head$0 1)) 0 (ite (and (= $state$0 4) (= $head$0 0)) 1 (ite (and (= $state$0 4) (= $head$0 1)) 1 0)))))))))) (= $state$1 (ite %init 1 (ite (and (= $state$0 1) (= $head$0 0)) 2 (ite (and (= $state$0 1) (= $head$0 1)) 2 (ite (and (= $state$0 2) (= $head$0 0)) 1 (ite (and (= $state$0 2) (= $head$0 1)) 3 (ite (and (= $state$0 3) (= $head$0 0)) 0 (ite (and (= $state$0 3) (= $head$0 1)) 4 (ite (and (= $state$0 4) (= $head$0 0)) 4 (ite (and (= $state$0 4) (= $head$0 1)) 1 0)))))))))) (= $cex$1 (not (= $state$1 0)))))

(declare-fun %init () Bool)
(declare-fun $left$~1 () Int)
(declare-fun $right$~1 () Int)
(declare-fun $head$~1 () Int)
(declare-fun $write$~1 () Int)
(declare-fun $move$~1 () Int)
(declare-fun $state$~1 () Int)
(declare-fun $cex$~1 () Bool)
(assert (and (<= 0 $move$~1) (<= $move$~1 1)))
(assert (and (<= 0 $state$~1) (<= $state$~1 4)))
(declare-fun $left$0 () Int)
(declare-fun $right$0 () Int)
(declare-fun $head$0 () Int)
(declare-fun $write$0 () Int)
(declare-fun $move$0 () Int)
(declare-fun $state$0 () Int)
(declare-fun $cex$0 () Bool)
(assert (and (<= 0 $move$0) (<= $move$0 1)))
(assert (and (<= 0 $state$0) (<= $state$0 4)))
(assert (T %init $left$~1 $right$~1 $head$~1 $write$~1 $move$~1 $state$~1 $cex$~1 $left$0 $right$0 $head$0 $write$0 $move$0 $state$0 $cex$0))

(push 1)
(assert (not (=> true $cex$0)))
(check-sat)
(pop 1)

(declare-fun $left$1 () Int)
(declare-fun $right$1 () Int)
(declare-fun $head$1 () Int)
(declare-fun $write$1 () Int)
(declare-fun $move$1 () Int)
(declare-fun $state$1 () Int)
(declare-fun $cex$1 () Bool)
(assert (and (<= 0 $move$1) (<= $move$1 1)))
(assert (and (<= 0 $state$1) (<= $state$1 4)))
(assert (T false $left$0 $right$0 $head$0 $write$0 $move$0 $state$0 $cex$0 $left$1 $right$1 $head$1 $write$1 $move$1 $state$1 $cex$1))

(push 1)
(assert (not (=> $cex$0 $cex$1)))
(check-sat)
(pop 1)

(declare-fun $left$2 () Int)
(declare-fun $right$2 () Int)
(declare-fun $head$2 () Int)
(declare-fun $write$2 () Int)
(declare-fun $move$2 () Int)
(declare-fun $state$2 () Int)
(declare-fun $cex$2 () Bool)
(assert (and (<= 0 $move$2) (<= $move$2 1)))
(assert (and (<= 0 $state$2) (<= $state$2 4)))
(assert (T false $left$1 $right$1 $head$1 $write$1 $move$1 $state$1 $cex$1 $left$2 $right$2 $head$2 $write$2 $move$2 $state$2 $cex$2))

(push 1)
(assert (not (=> (and $cex$0 $cex$1) $cex$2)))
(check-sat)
(pop 1)

(declare-fun $left$3 () Int)
(declare-fun $right$3 () Int)
(declare-fun $head$3 () Int)
(declare-fun $write$3 () Int)
(declare-fun $move$3 () Int)
(declare-fun $state$3 () Int)
(declare-fun $cex$3 () Bool)
(assert (and (<= 0 $move$3) (<= $move$3 1)))
(assert (and (<= 0 $state$3) (<= $state$3 4)))
(assert (T false $left$2 $right$2 $head$2 $write$2 $move$2 $state$2 $cex$2 $left$3 $right$3 $head$3 $write$3 $move$3 $state$3 $cex$3))
(assert (not (=> (and $cex$0 $cex$1 $cex$2) $cex$3)))

(check-sat)

Yices gives

sat
sat
sat
unsat

The last query should be sat as can be shown by removing either the first or third push/pop blocks.

Assertion failure in diophantine_systems.c

Yices fails with an assertion failure on a QF_AUFLIA benchmark

./solvers/yices2/build/x86_64-unknown-linux-gnu-devel/bin/yices_smt2 errors/QF_AUFLIA/yices2_to_check/error1.smt
yices_smt2: solvers/simplex/diophantine_systems.c:2792: dsolver_expl_collect_solved_columns: Assertion `solver->main_rows <= k && k < solver->nrows' failed.

Trace

Program received signal SIGABRT, Aborted.
0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
0000001 0x00007ffff77e5b8b in __GI_abort () at abort.c:91
0000002 0x00007ffff77db0ee in __assert_fail_base (fmt=<optimized out>, assertion=0x58adb8 "solver->main_rows <= k && k < solver->nrows",
    file=0x58a278 "solvers/simplex/diophantine_systems.c", line=<optimized out>, function=<optimized out>) at assert.c:94
0000003 0x00007ffff77db192 in __GI___assert_fail (assertion=0x58adb8 "solver->main_rows <= k && k < solver->nrows",
    file=0x58a278 "solvers/simplex/diophantine_systems.c", line=2792, function=0x58b760 "dsolver_expl_collect_solved_columns") at assert.c:103
0000004 0x000000000054891a in dsolver_expl_collect_solved_columns (solver=0x8915e0) at solvers/simplex/diophantine_systems.c:2792
0000005 dsolver_explain_solution (solver=0x8915e0, x=<optimized out>, v=0x8172a0) at solvers/simplex/diophantine_systems.c:2862
0000006 0x000000000049c95d in build_integer_solution_antecedent (solver=0x816f40, x=<optimized out>, q=0x8172b0) at solvers/simplex/simplex.c:6118
0000007 0x00000000004a52f0 in strengthen_bounds_on_integer_variable (p=<optimized out>, x=169, solver=0x816f40, dioph=<optimized out>)
    at solvers/simplex/simplex.c:6236
0000008 strengthen_integer_bounds (dioph=0x8915e0, solver=0x816f40) at solvers/simplex/simplex.c:6277
0000009 simplex_dsolver_check (solver=<optimized out>) at solvers/simplex/simplex.c:6397
0000010 simplex_make_integer_feasible (solver=<optimized out>) at solvers/simplex/simplex.c:6460
0000011 simplex_final_check (solver=<optimized out>) at solvers/simplex/simplex.c:7449
0000012 0x000000000047a3d9 in experimental_final_check (egraph=0x809a90) at solvers/egraph/egraph.c:5969
0000013 egraph_final_check (egraph=0x809a90) at solvers/egraph/egraph.c:6070
0000014 0x0000000000474896 in smt_final_check (s=0x809230) at solvers/cdcl/smt_core.c:5631
0000015 0x00000000004273ac in special_search (core=0x809230, conflict_bound=<optimized out>, reduce_threshold=0x7fffffffe770, r_factor=1.05,
    branch=0x427000 <negative_branch>) at context/context_solver.c:170
0000016 0x0000000000427907 in solve (params=0x7d3340, core=0x809230) at context/context_solver.c:284
0000017 check_context (ctx=<optimized out>, params=0x7d3340) at context/context_solver.c:416
0000018 0x00000000005037e0 in check_delayed_assertions (g=<optimized out>) at frontend/smt2/smt2_commands.c:2333
0000019 smt2_check_sat () at frontend/smt2/smt2_commands.c:3677
0000020 0x00000000005094f9 in eval_smt2_check_sat (stack=0x7d2880, f=<optimized out>, n=<optimized out>) at frontend/smt2/smt2_term_stack.c:789
0000021 0x000000000050712a in smt2_parse (parser=0x7d2a20, start=c0) at frontend/smt2/smt2_parser.c:252
0000022 0x0000000000406fac in main (argc=<optimized out>, argv=<optimized out>) at frontend/yices_smt2.c:324

Incorrect results with (lambda (x) (not (p x))) is used

Andrew Gaceck reported this bug:

In the meantime, I've stumbled on what I think is a bug in yices-smt2.
My input:

  (set-option :produce-models true)
  (set-logic QF_UFLIA)
  (declare-fun f (Int) Bool)
  (define-fun nf ((i Int)) Bool (not (f i)))
  (assert (f 0))
  (check-sat)
  (get-value ((f 0) (nf 0) (f 0) (not (f 0))))

The output:

  (((f 0) true)
   ((nf 0) true)
   ((f 0) true)
   ((not (f 0)) false))

I would expect to see (nf 0) equal to false. I think the same problem
manifests with yices, and I've attached a file trying to show a
similar problem.

Bug reported by Martin Stanek

Yices 2.2.1 produces an incorrect model because of a mix-up in bvxor representation.

(set-option :produce-models true)
(set-logic QF_BV)

(declare-fun q () (_ BitVec 16))
(declare-fun q1 () (_ BitVec 16))
(declare-fun q2 () (_ BitVec 16))

(define-fun bitxor ((x (_ BitVec 16))) (_ BitVec 16)
   (bvxor (bvshl x #x0008) x))

(assert (= q1 #x4200))
(assert (= q2 (bvxor (bvshl q1 #x0008) q1)))
(assert (= q (bitxor q1)))

; GOAL
(check-sat)
(get-value (q1 q2 q))

Assertion failure in BV parsing (smt2)

The problem

(set-logic QF_BV)
(declare-fun x () (_ BitVec 64))
(assert (= x (bvlshr (_ bv0 64) (bvmul (_ bv0 64) (_ bv8 64)))))
(check-sat)

Fails assertion

yices_smt2: parser_utils/term_stack2.c:2454: bvconst_set_elem: Assertion `0' failed.

with trace

Program received signal SIGABRT, Aborted.
0x00007ffff77d7cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  0x00007ffff77d7cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007ffff77db0d8 in __GI_abort () at abort.c:89
#2  0x00007ffff77d0b86 in __assert_fail_base (fmt=0x7ffff7921830 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x5aefff "0", 
    file=file@entry=0x5ae847 "parser_utils/term_stack2.c", line=line@entry=2454, function=function@entry=0x5af820 <__PRETTY_FUNCTION__.17928> "bvconst_set_elem")
    at assert.c:92
#3  0x00007ffff77d0c32 in __GI___assert_fail (assertion=0x5aefff "0", file=0x5ae847 "parser_utils/term_stack2.c", line=2454, 
    function=0x5af820 <__PRETTY_FUNCTION__.17928> "bvconst_set_elem") at assert.c:101
#4  0x000000000045e5d3 in bvconst_set_elem (c=0x85ea68 <stack+104>, e=0x879c50) at parser_utils/term_stack2.c:2454
#5  0x0000000000463ba5 in eval_mk_bv_lshr (stack=0x85ea00 <stack>, f=0x879c30, n=2) at parser_utils/term_stack2.c:4714
#6  0x0000000000464824 in tstack_eval (stack=0x85ea00 <stack>) at parser_utils/term_stack2.c:5091
#7  0x0000000000539738 in smt2_parse (parser=0x85e9e0 <parser>, start=c0) at frontend/smt2/smt2_parser.c:259
#8  0x000000000053a69f in parse_smt2_command (parser=0x85e9e0 <parser>) at frontend/smt2/smt2_parser.c:828
#9  0x0000000000402c66 in main (argc=2, argv=0x7fffffffdc88) at frontend/yices_smt2.c:331

Getting models for division by 0

In order to properly handle division, mcsat should assign the division operator an uninterpreted function that is inspected when dividing by 0.

Requires proper models of for UF, to be done for #48.

Assertion failure in simplex (QF_AUFLIA)

Error message:

yices2_to_check: solvers/simplex/simplex.c:7563: process_integrality_constraint: Assertion `plausible_period_and_phase(checker, i, p, q)' failed.

Backtrace:

Program received signal SIGABRT, Aborted.
0x00007ffff77d7cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  0x00007ffff77d7cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007ffff77db0d8 in __GI_abort () at abort.c:89
#2  0x00007ffff77d0b86 in __assert_fail_base (fmt=0x7ffff7921830 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", 
    assertion=assertion@entry=0x5b2ac8 "plausible_period_and_phase(checker, i, p, q)", file=file@entry=0x5b2b0f "solvers/simplex/simplex.c", line=line@entry=7563, 
    function=function@entry=0x5b3cd0 <__PRETTY_FUNCTION__.19414> "process_integrality_constraint") at assert.c:92
#3  0x00007ffff77d0c32 in __GI___assert_fail (assertion=assertion@entry=0x5b2ac8 "plausible_period_and_phase(checker, i, p, q)", 
    file=file@entry=0x5b2b0f "solvers/simplex/simplex.c", line=line@entry=7563, 
    function=function@entry=0x5b3cd0 <__PRETTY_FUNCTION__.19414> "process_integrality_constraint") at assert.c:101
#4  0x00000000004c5aa2 in process_integrality_constraint (checker=0x7fffffffd820, solver=<optimized out>) at solvers/simplex/simplex.c:7563
#5  test_integrality_in_row (row=<optimized out>, checker=0x7fffffffd820, solver=<optimized out>) at solvers/simplex/simplex.c:7622
#6  simplex_integrality_check (solver=<optimized out>) at solvers/simplex/simplex.c:7648
#7  simplex_make_integer_feasible (solver=<optimized out>) at solvers/simplex/simplex.c:7747
#8  simplex_final_check (solver=<optimized out>) at solvers/simplex/simplex.c:8837
#9  0x00000000004907d5 in experimental_final_check (egraph=0x886430) at solvers/egraph/egraph.c:6052
#10 egraph_final_check (egraph=0x886430) at solvers/egraph/egraph.c:6161
#11 0x000000000048aa36 in smt_final_check (s=s@entry=0x8855b0) at solvers/cdcl/smt_core.c:5637
#12 0x000000000042ca5d in special_search (branch=0x42c000 <negative_branch>, r_factor=1.05, reduce_threshold=<synthetic pointer>, conflict_bound=100, 
    core=<optimized out>) at context/context_solver.c:179
#13 solve (params=0x8293e0 <parameters>, core=<optimized out>) at context/context_solver.c:284
#14 check_context (ctx=<optimized out>, params=params@entry=0x8293e0 <parameters>) at context/context_solver.c:425
#15 0x000000000053248e in check_delayed_assertions (g=0x8299c0 <__smt2_globals>) at frontend/smt2/smt2_commands.c:2448
#16 smt2_check_sat () at frontend/smt2/smt2_commands.c:3807
#17 0x0000000000538539 in eval_smt2_check_sat (stack=0x828900 <stack>, f=<optimized out>, n=<optimized out>) at frontend/smt2/smt2_term_stack.c:796
#18 0x0000000000535bf3 in smt2_parse (parser=parser@entry=0x828aa0 <parser>, start=c0) at frontend/smt2/smt2_parser.c:259
#19 0x0000000000536775 in parse_smt2_command (parser=parser@entry=0x828aa0 <parser>) at frontend/smt2/smt2_parser.c:828
#20 0x0000000000409b54 in main (argc=<optimized out>, argv=<optimized out>) at frontend/yices_smt2.c:329

Problem:

(set-info :source |fuzzsmt|)
(set-info :smt-lib-version 2.0)
(set-info :category "random")
(set-info :status unknown)
(set-logic QF_AUFLIA)
(define-sort Index () Int)
(define-sort Element () Int)
(declare-fun f0 ( Int) Int)
(declare-fun f1 ( (Array Index Element) (Array Index Element) (Array Index Element)) (Array Index Element))
(declare-fun p0 ( Int Int) Bool)
(declare-fun p1 ( (Array Index Element)) Bool)
(declare-fun v0 () Int)
(declare-fun v1 () Int)
(declare-fun v2 () Int)
(declare-fun v3 () (Array Index Element))
(declare-fun v4 () (Array Index Element))
(assert (let ((e5 68527978635448))
(let ((e6 19151976281))
(let ((e7 9014436612432))
(let ((e8 (- v2 v2)))
(let ((e9 (+ v1 v2)))
(let ((e10 (f0 v0)))
(let ((e11 (* (- e6) e10)))
(let ((e12 (+ v0 v1)))
(let ((e13 (f0 e10)))
(let ((e14 (+ e12 e10)))
(let ((e15 (- e8 e11)))
(let ((e16 (+ e10 v0)))
(let ((e17 (- e10 e8)))
(let ((e18 (- e16 e17)))
(let ((e19 (+ e18 e8)))
(let ((e20 (- v1)))
(let ((e21 (- e14)))
(let ((e22 (+ e19 v1)))
(let ((e23 (f0 e15)))
(let ((e24 (- e18)))
(let ((e25 (ite (p0 e11 v0) 1 0)))
(let ((e26 (+ e24 v2)))
(let ((e27 (* (- e6) e14)))
(let ((e28 (- e16 e22)))
(let ((e29 (- v0 e17)))
(let ((e30 (+ e16 e28)))
(let ((e31 (+ e20 e24)))
(let ((e32 (ite (p0 v2 e25) 1 0)))
(let ((e33 (- e26)))
(let ((e34 (+ e33 e13)))
(let ((e35 (- e11 e12)))
(let ((e36 (- e9)))
(let ((e37 (* e27 e5)))
(let ((e38 (ite (p0 e17 e36) 1 0)))
(let ((e39 (+ e33 e21)))
(let ((e40 (- e23 e27)))
(let ((e41 (+ e26 e38)))
(let ((e42 (- e22 e31)))
(let ((e43 (- e34)))
(let ((e44 (f0 e36)))
(let ((e45 (- e19 e35)))
(let ((e46 (f0 e41)))
(let ((e47 (- e45)))
(let ((e48 (ite (p0 e33 e9) 1 0)))
(let ((e49 (+ e40 e34)))
(let ((e50 (- e16 e34)))
(let ((e51 (ite (p0 e47 e20) 1 0)))
(let ((e52 (+ e42 e44)))
(let ((e53 (+ e38 e12)))
(let ((e54 (- v2)))
(let ((e55 (f0 e22)))
(let ((e56 (- v2)))
(let ((e57 (f0 e43)))
(let ((e58 (- e27)))
(let ((e59 (* (- e5) e56)))
(let ((e60 (- e37 e57)))
(let ((e61 (- e9 e12)))
(let ((e62 (ite (p0 e18 e9) 1 0)))
(let ((e63 (ite (p0 e61 e27) 1 0)))
(let ((e64 (f0 e35)))
(let ((e65 (+ v0 e62)))
(let ((e66 (- e59 e55)))
(let ((e67 (- e63 e43)))
(let ((e68 (- e61 e32)))
(let ((e69 (+ e25 e17)))
(let ((e70 (- e44)))
(let ((e71 (+ e23 v2)))
(let ((e72 (ite (p0 e35 e36) 1 0)))
(let ((e73 (f0 e55)))
(let ((e74 (* e36 (- e5))))
(let ((e75 (- e27 e16)))
(let ((e76 (* (- e7) e73)))
(let ((e77 (select v4 e40)))
(let ((e78 (select v4 e46)))
(let ((e79 (f1 v4 v4 v3)))
(let ((e80 (p1 v4)))
(let ((e81 (p1 e79)))
(let ((e82 (p1 v3)))
(let ((e83 (< e35 e42)))
(let ((e84 (<= e52 e62)))
(let ((e85 (<= e54 e53)))
(let ((e86 (<= e30 e20)))
(let ((e87 (distinct v0 e41)))
(let ((e88 (> e55 e42)))
(let ((e89 (distinct e10 e50)))
(let ((e90 (= e63 e57)))
(let ((e91 (distinct e60 e60)))
(let ((e92 (p0 e75 e21)))
(let ((e93 (<= e16 e72)))
(let ((e94 (= e14 e10)))
(let ((e95 (distinct e26 e72)))
(let ((e96 (distinct e29 e54)))
(let ((e97 (> e74 e59)))
(let ((e98 (distinct e20 e40)))
(let ((e99 (= e56 e77)))
(let ((e100 (distinct e64 e66)))
(let ((e101 (> e11 e51)))
(let ((e102 (<= e41 e35)))
(let ((e103 (> e71 e22)))
(let ((e104 (> e9 e36)))
(let ((e105 (= e65 e27)))
(let ((e106 (p0 e77 e20)))
(let ((e107 (distinct e56 e10)))
(let ((e108 (= e44 e31)))
(let ((e109 (>= e8 e28)))
(let ((e110 (> e44 e43)))
(let ((e111 (< e15 e13)))
(let ((e112 (distinct e50 e71)))
(let ((e113 (> e43 e71)))
(let ((e114 (p0 e48 e32)))
(let ((e115 (>= e21 e66)))
(let ((e116 (> e26 e50)))
(let ((e117 (<= e68 e45)))
(let ((e118 (distinct e61 e52)))
(let ((e119 (p0 e13 e75)))
(let ((e120 (< v2 e42)))
(let ((e121 (= e46 e49)))
(let ((e122 (> e22 e37)))
(let ((e123 (= e76 e66)))
(let ((e124 (>= e63 e50)))
(let ((e125 (distinct e53 e34)))
(let ((e126 (>= e56 e25)))
(let ((e127 (> e78 e41)))
(let ((e128 (>= e50 e8)))
(let ((e129 (< e73 e55)))
(let ((e130 (>= e58 e64)))
(let ((e131 (= e19 e34)))
(let ((e132 (> e69 e72)))
(let ((e133 (> e17 e65)))
(let ((e134 (p0 e52 e54)))
(let ((e135 (= e11 e13)))
(let ((e136 (> e70 e62)))
(let ((e137 (= e62 e22)))
(let ((e138 (distinct e47 e66)))
(let ((e139 (>= e39 e78)))
(let ((e140 (<= e35 e37)))
(let ((e141 (distinct e67 v2)))
(let ((e142 (= e27 e65)))
(let ((e143 (= e18 e14)))
(let ((e144 (< e24 e53)))
(let ((e145 (>= e73 e77)))
(let ((e146 (p0 e57 e10)))
(let ((e147 (< e32 e21)))
(let ((e148 (< e72 e70)))
(let ((e149 (< v0 e22)))
(let ((e150 (<= e33 e26)))
(let ((e151 (< e56 e54)))
(let ((e152 (= e20 e58)))
(let ((e153 (> e43 e10)))
(let ((e154 (= e23 e60)))
(let ((e155 (< e49 e52)))
(let ((e156 (<= e38 e48)))
(let ((e157 (distinct v1 e47)))
(let ((e158 (< e12 e32)))
(let ((e159 (ite e158 v4 e79)))
(let ((e160 (ite e139 e79 e159)))
(let ((e161 (ite e137 v3 e79)))
(let ((e162 (ite e141 v3 v3)))
(let ((e163 (ite e89 e162 v3)))
(let ((e164 (ite e110 e159 e161)))
(let ((e165 (ite e104 e163 e162)))
(let ((e166 (ite e129 e160 e79)))
(let ((e167 (ite e80 e163 e161)))
(let ((e168 (ite e97 e163 v3)))
(let ((e169 (ite e124 e168 v3)))
(let ((e170 (ite e87 e162 e162)))
(let ((e171 (ite e100 e168 e160)))
(let ((e172 (ite e120 e164 e167)))
(let ((e173 (ite e102 e163 e171)))
(let ((e174 (ite e131 v3 v4)))
(let ((e175 (ite e83 e171 e174)))
(let ((e176 (ite e93 e174 e170)))
(let ((e177 (ite e138 e175 e176)))
(let ((e178 (ite e127 e79 e176)))
(let ((e179 (ite e104 e164 e162)))
(let ((e180 (ite e130 e165 e173)))
(let ((e181 (ite e107 e163 e173)))
(let ((e182 (ite e94 e173 e176)))
(let ((e183 (ite e103 e179 e167)))
(let ((e184 (ite e135 e172 e170)))
(let ((e185 (ite e96 v4 e181)))
(let ((e186 (ite e147 e180 e178)))
(let ((e187 (ite e150 e167 v4)))
(let ((e188 (ite e119 v4 e187)))
(let ((e189 (ite e157 e164 e184)))
(let ((e190 (ite e88 e185 e168)))
(let ((e191 (ite e87 e172 e174)))
(let ((e192 (ite e118 e176 e159)))
(let ((e193 (ite e156 e177 e186)))
(let ((e194 (ite e126 e180 e178)))
(let ((e195 (ite e145 e188 e183)))
(let ((e196 (ite e121 e172 e173)))
(let ((e197 (ite e113 e176 e190)))
(let ((e198 (ite e148 e184 e184)))
(let ((e199 (ite e124 e191 e188)))
(let ((e200 (ite e146 e172 e193)))
(let ((e201 (ite e91 e184 e192)))
(let ((e202 (ite e116 e168 e177)))
(let ((e203 (ite e140 e168 e182)))
(let ((e204 (ite e143 e173 e195)))
(let ((e205 (ite e114 e186 v3)))
(let ((e206 (ite e120 e179 e180)))
(let ((e207 (ite e157 e205 e191)))
(let ((e208 (ite e153 e167 e201)))
(let ((e209 (ite e158 e162 e205)))
(let ((e210 (ite e86 e204 e175)))
(let ((e211 (ite e123 e206 e180)))
(let ((e212 (ite e85 e172 e204)))
(let ((e213 (ite e146 e186 e182)))
(let ((e214 (ite e151 v4 e209)))
(let ((e215 (ite e99 e172 e199)))
(let ((e216 (ite e136 e182 e206)))
(let ((e217 (ite e154 e216 e209)))
(let ((e218 (ite e152 e190 e182)))
(let ((e219 (ite e95 e79 e175)))
(let ((e220 (ite e115 e161 e191)))
(let ((e221 (ite e132 e199 e185)))
(let ((e222 (ite e121 e171 e211)))
(let ((e223 (ite e112 e176 e211)))
(let ((e224 (ite e101 e191 e172)))
(let ((e225 (ite e117 e197 e223)))
(let ((e226 (ite e144 e163 v3)))
(let ((e227 (ite e125 e183 e79)))
(let ((e228 (ite e98 e181 e199)))
(let ((e229 (ite e117 e214 e182)))
(let ((e230 (ite e154 e79 e163)))
(let ((e231 (ite e128 e209 e174)))
(let ((e232 (ite e120 e160 e225)))
(let ((e233 (ite e120 e195 e173)))
(let ((e234 (ite e148 e208 e225)))
(let ((e235 (ite e84 e177 e179)))
(let ((e236 (ite e155 e162 e193)))
(let ((e237 (ite e81 e208 e193)))
(let ((e238 (ite e126 e193 e176)))
(let ((e239 (ite e158 e174 e224)))
(let ((e240 (ite e105 e212 e224)))
(let ((e241 (ite e122 e228 e177)))
(let ((e242 (ite e149 e232 e164)))
(let ((e243 (ite e90 e169 e211)))
(let ((e244 (ite e103 e178 e213)))
(let ((e245 (ite e111 e175 e194)))
(let ((e246 (ite e106 e209 e225)))
(let ((e247 (ite e108 e172 e233)))
(let ((e248 (ite e134 e216 e200)))
(let ((e249 (ite e82 e231 e172)))
(let ((e250 (ite e133 e183 e183)))
(let ((e251 (ite e149 e246 e248)))
(let ((e252 (ite e109 e173 e190)))
(let ((e253 (ite e142 e193 e196)))
(let ((e254 (ite e136 e181 e195)))
(let ((e255 (ite e92 e237 e204)))
(let ((e256 (ite e83 e58 e22)))
(let ((e257 (ite e132 e28 e40)))
(let ((e258 (ite e88 e57 e40)))
(let ((e259 (ite e82 e24 e40)))
(let ((e260 (ite e103 e8 e26)))
(let ((e261 (ite e149 e62 e46)))
(let ((e262 (ite e144 e57 e42)))
(let ((e263 (ite e109 e51 e73)))
(let ((e264 (ite e145 e59 e261)))
(let ((e265 (ite e137 e72 e42)))
(let ((e266 (ite e117 e10 e45)))
(let ((e267 (ite e94 e14 e77)))
(let ((e268 (ite e151 e72 e21)))
(let ((e269 (ite e139 e15 e11)))
(let ((e270 (ite e84 e36 e47)))
(let ((e271 (ite e119 e33 e52)))
(let ((e272 (ite e82 e32 e78)))
(let ((e273 (ite e133 e263 v1)))
(let ((e274 (ite e90 e19 e20)))
(let ((e275 (ite e125 e39 e66)))
(let ((e276 (ite e135 e20 e263)))
(let ((e277 (ite e122 v1 e41)))
(let ((e278 (ite e124 v2 e36)))
(let ((e279 (ite e89 e34 e277)))
(let ((e280 (ite e152 e270 e41)))
(let ((e281 (ite e101 e20 e35)))
(let ((e282 (ite e131 e76 e259)))
(let ((e283 (ite e158 e263 e270)))
(let ((e284 (ite e153 e61 e269)))
(let ((e285 (ite e114 e12 e57)))
(let ((e286 (ite e107 e68 e25)))
(let ((e287 (ite e96 e271 e77)))
(let ((e288 (ite e127 e70 e24)))
(let ((e289 (ite e110 e284 e22)))
(let ((e290 (ite e130 e263 e282)))
(let ((e291 (ite e120 e49 e64)))
(let ((e292 (ite e127 e286 e37)))
(let ((e293 (ite e118 e38 e61)))
(let ((e294 (ite e140 e259 e288)))
(let ((e295 (ite e87 e22 e47)))
(let ((e296 (ite e113 e53 e14)))
(let ((e297 (ite e123 e31 e54)))
(let ((e298 (ite e91 e50 e46)))
(let ((e299 (ite e141 e27 e272)))
(let ((e300 (ite e104 e286 e30)))
(let ((e301 (ite e129 e10 e282)))
(let ((e302 (ite e121 e23 e290)))
(let ((e303 (ite e114 e280 v1)))
(let ((e304 (ite e145 v0 e57)))
(let ((e305 (ite e148 e8 e276)))
(let ((e306 (ite e155 v1 e294)))
(let ((e307 (ite e157 e32 e10)))
(let ((e308 (ite e134 e29 e22)))
(let ((e309 (ite e126 e42 e258)))
(let ((e310 (ite e98 e44 v2)))
(let ((e311 (ite e81 e75 e291)))
(let ((e312 (ite e112 e58 e309)))
(let ((e313 (ite e106 e13 e62)))
(let ((e314 (ite e86 e56 e70)))
(let ((e315 (ite e92 e18 e256)))
(let ((e316 (ite e119 e48 e37)))
(let ((e317 (ite e100 e46 e28)))
(let ((e318 (ite e111 e271 e57)))
(let ((e319 (ite e133 e71 e293)))
(let ((e320 (ite e145 e15 e63)))
(let ((e321 (ite e100 e16 e301)))
(let ((e322 (ite e86 e67 e20)))
(let ((e323 (ite e95 e56 e314)))
(let ((e324 (ite e115 e320 e66)))
(let ((e325 (ite e147 e291 e70)))
(let ((e326 (ite e136 e69 e16)))
(let ((e327 (ite e90 e305 e20)))
(let ((e328 (ite e118 v2 e268)))
(let ((e329 (ite e148 e309 e295)))
(let ((e330 (ite e135 e43 e10)))
(let ((e331 (ite e142 e14 e49)))
(let ((e332 (ite e93 e65 e24)))
(let ((e333 (ite e102 e26 e20)))
(let ((e334 (ite e128 e20 e317)))
(let ((e335 (ite e146 e36 e9)))
(let ((e336 (ite e154 e60 e76)))
(let ((e337 (ite e144 e55 e336)))
(let ((e338 (ite e85 e74 e316)))
(let ((e339 (ite e132 e17 e262)))
(let ((e340 (ite e103 e256 e332)))
(let ((e341 (ite e105 e263 v1)))
(let ((e342 (ite e135 e266 e285)))
(let ((e343 (ite e99 e68 e281)))
(let ((e344 (ite e150 v0 e61)))
(let ((e345 (ite e138 e265 e275)))
(let ((e346 (ite e143 e266 e27)))
(let ((e347 (ite e92 e43 e16)))
(let ((e348 (ite e97 e12 e285)))
(let ((e349 (ite e109 e336 e58)))
(let ((e350 (ite e116 e30 e69)))
(let ((e351 (ite e80 e282 e51)))
(let ((e352 (ite e135 e294 e30)))
(let ((e353 (ite e156 v1 e30)))
(let ((e354 (ite e107 e333 e270)))
(let ((e355 (ite e108 e21 e8)))
(let ((e356 (select v3 e13)))
(let ((e357 (select e188 e299)))
(let ((e358 (f1 e250 e227 e231)))
(let ((e359 (f1 e218 e195 e251)))
(let ((e360 (f1 e172 e197 e163)))
(let ((e361 (f1 e198 e210 e235)))
(let ((e362 (f1 e360 e170 e193)))
(let ((e363 (f1 e181 e181 e181)))
(let ((e364 (f1 e242 e242 e242)))
(let ((e365 (f1 e233 e196 e192)))
(let ((e366 (f1 e213 e200 e361)))
(let ((e367 (f1 e189 e185 e172)))
(let ((e368 (f1 e161 e220 e363)))
(let ((e369 (f1 e237 e170 e222)))
(let ((e370 (f1 e189 e231 e248)))
(let ((e371 (f1 e165 e193 e216)))
(let ((e372 (f1 e218 e192 e212)))
(let ((e373 (f1 e166 e235 v3)))
(let ((e374 (f1 e201 e211 e367)))
(let ((e375 (f1 e206 e185 e172)))
(let ((e376 (f1 e217 e215 e252)))
(let ((e377 (f1 e173 e213 e174)))
(let ((e378 (f1 e161 e188 e170)))
(let ((e379 (f1 e179 e179 e179)))
(let ((e380 (f1 e184 e184 e184)))
(let ((e381 (f1 e229 e229 e201)))
(let ((e382 (f1 e239 e239 e239)))
(let ((e383 (f1 e182 e363 e217)))
(let ((e384 (f1 e173 e383 e251)))
(let ((e385 (f1 e225 e225 e225)))
(let ((e386 (f1 e207 e207 e207)))
(let ((e387 (f1 e186 e186 e184)))
(let ((e388 (f1 e189 e197 e181)))
(let ((e389 (f1 e190 e253 e246)))
(let ((e390 (f1 e228 e228 e228)))
(let ((e391 (f1 e209 e209 e209)))
(let ((e392 (f1 v4 v4 v4)))
(let ((e393 (f1 e247 e225 e364)))
(let ((e394 (f1 e230 e392 e231)))
(let ((e395 (f1 e193 e239 e197)))
(let ((e396 (f1 e241 e384 e226)))
(let ((e397 (f1 e194 e194 e194)))
(let ((e398 (f1 e249 e249 e249)))
(let ((e399 (f1 e224 e230 e180)))
(let ((e400 (f1 e167 e251 e362)))
(let ((e401 (f1 e203 e184 e163)))
(let ((e402 (f1 e366 e182 e187)))
(let ((e403 (f1 e245 e245 e245)))
(let ((e404 (f1 e162 e162 e162)))
(let ((e405 (f1 e176 e168 e160)))
(let ((e406 (f1 e203 e180 e220)))
(let ((e407 (f1 e206 e234 e392)))
(let ((e408 (f1 e254 e254 e185)))
(let ((e409 (f1 e383 e166 e160)))
(let ((e410 (f1 e208 e208 e208)))
(let ((e411 (f1 e410 e383 e405)))
(let ((e412 (f1 e233 e363 e374)))
(let ((e413 (f1 e201 e361 e199)))
(let ((e414 (f1 e79 e79 e79)))
(let ((e415 (f1 e171 e217 e219)))
(let ((e416 (f1 e214 e214 e403)))
(let ((e417 (f1 e253 e216 e193)))
(let ((e418 (f1 e367 e195 e79)))
(let ((e419 (f1 e401 e380 e367)))
(let ((e420 (f1 e244 e244 e244)))
(let ((e421 (f1 e159 e159 e159)))
(let ((e422 (f1 e205 e365 e196)))
(let ((e423 (f1 e214 e235 e384)))
(let ((e424 (f1 e238 e189 e214)))
(let ((e425 (f1 e202 e202 e202)))
(let ((e426 (f1 e396 e401 e179)))
(let ((e427 (f1 e380 e369 e193)))
(let ((e428 (f1 e236 e418 e169)))
(let ((e429 (f1 e248 e188 e372)))
(let ((e430 (f1 e223 e250 e358)))
(let ((e431 (f1 e395 e399 e364)))
(let ((e432 (f1 e204 e204 e204)))
(let ((e433 (f1 e178 e410 e432)))
(let ((e434 (f1 e383 e170 e373)))
(let ((e435 (f1 e181 e416 e180)))
(let ((e436 (f1 e396 e229 e393)))
(let ((e437 (f1 e187 e200 e364)))
(let ((e438 (f1 e380 e428 e164)))
(let ((e439 (f1 e243 e225 e235)))
(let ((e440 (f1 e232 e201 e244)))
(let ((e441 (f1 e183 e183 e163)))
(let ((e442 (f1 e255 e159 e368)))
(let ((e443 (f1 e388 e401 e422)))
(let ((e444 (f1 e191 e191 e191)))
(let ((e445 (f1 e364 e212 e382)))
(let ((e446 (f1 e177 e177 e79)))
(let ((e447 (f1 e175 e175 e175)))
(let ((e448 (f1 e166 e417 e249)))
(let ((e449 (f1 e240 e369 e424)))
(let ((e450 (f1 e243 e382 e406)))
(let ((e451 (f1 e221 e221 e418)))
(let ((e452 (- e38)))
(let ((e453 (* e53 e7)))
(let ((e454 (* e7 e283)))
(let ((e455 (f0 e32)))
(let ((e456 (- e49 e290)))
(let ((e457 (f0 e267)))
(let ((e458 (* e286 e6)))
(let ((e459 (f0 e320)))
(let ((e460 (- e23 e270)))
(let ((e461 (* e5 e346)))
(let ((e462 (* e304 (- e5))))
(let ((e463 (+ e74 e453)))
(let ((e464 (- e293)))
(let ((e465 (* e7 e22)))
(let ((e466 (- e328)))
(let ((e467 (+ e44 e40)))
(let ((e468 (- e328 e340)))
(let ((e469 (- e300)))
(let ((e470 (* (- e7) e33)))
(let ((e471 (* e78 e5)))
(let ((e472 (f0 e67)))
(let ((e473 (- e352)))
(let ((e474 (f0 e23)))
(let ((e475 (ite (p0 e73 e66) 1 0)))
(let ((e476 (+ e55 e470)))
(let ((e477 (- e455)))
(let ((e478 (+ e275 e269)))
(let ((e479 (- e34 e11)))
(let ((e480 (- e39)))
(let ((e481 (- e272 e337)))
(let ((e482 (- e349 e262)))
(let ((e483 (+ e35 e50)))
(let ((e484 (ite (p0 e260 e269) 1 0)))
(let ((e485 (- e325 e267)))
(let ((e486 (f0 e75)))
(let ((e487 (f0 e64)))
(let ((e488 (ite (p0 e326 e461) 1 0)))
(let ((e489 (* e7 e33)))
(let ((e490 (- e477 e313)))
(let ((e491 (f0 e311)))
(let ((e492 (- e20 e348)))
(let ((e493 (* e6 e37)))
(let ((e494 (- e306)))
(let ((e495 (f0 e470)))
(let ((e496 (f0 e8)))
(let ((e497 (- e66)))
(let ((e498 (ite (p0 e301 e485) 1 0)))
(let ((e499 (- e36 e282)))
(let ((e500 (- e57 e274)))
(let ((e501 (ite (p0 e281 e313) 1 0)))
(let ((e502 (- e25)))
(let ((e503 (+ e296 e471)))
(let ((e504 (+ e31 v2)))
(let ((e505 (- e321)))
(let ((e506 (- e265)))
(let ((e507 (- e265 e349)))
(let ((e508 (* e350 e6)))
(let ((e509 (- e261 e21)))
(let ((e510 (* (- e5) e278)))
(let ((e511 (- e285)))
(let ((e512 (f0 e72)))
(let ((e513 (f0 e29)))
(let ((e514 (* e345 e7)))
(let ((e515 (ite (p0 e61 e469) 1 0)))
(let ((e516 (ite (p0 e46 e508) 1 0)))
(let ((e517 (+ e264 e300)))
(let ((e518 (- e280 e266)))
(let ((e519 (- e13 e276)))
(let ((e520 (- e310 e485)))
(let ((e521 (- e9)))
(let ((e522 (f0 e454)))
(let ((e523 (+ e317 e477)))
(let ((e524 (f0 e271)))
(let ((e525 (f0 e268)))
(let ((e526 (f0 e47)))
(let ((e527 (f0 e17)))
(let ((e528 (- e256 e322)))
(let ((e529 (+ e324 e280)))
(let ((e530 (- e77)))
(let ((e531 (ite (p0 e66 e48) 1 0)))
(let ((e532 (f0 e344)))
(let ((e533 (* (- e5) e10)))
(let ((e534 (* e6 e56)))
(let ((e535 (* e455 e5)))
(let ((e536 (- e477 e297)))
(let ((e537 (ite (p0 e356 e452) 1 0)))
(let ((e538 (f0 e327)))
(let ((e539 (+ e497 e357)))
(let ((e540 (- e16)))
(let ((e541 (ite (p0 e305 e274) 1 0)))
(let ((e542 (- e78)))
(let ((e543 (- e324)))
(let ((e544 (* (- e6) e332)))
(let ((e545 (- e342)))
(let ((e546 (f0 e70)))
(let ((e547 (- e541 e538)))
(let ((e548 (ite (p0 e353 e46) 1 0)))
(let ((e549 (+ e55 e312)))
(let ((e550 (ite (p0 e330 e489) 1 0)))
(let ((e551 (f0 e499)))
(let ((e552 (* (- e7) e334)))
(let ((e553 (f0 e308)))
(let ((e554 (* e332 (- e5))))
(let ((e555 (- e478)))
(let ((e556 (- e284)))
(let ((e557 (f0 e54)))
(let ((e558 (f0 e299)))
(let ((e559 (* (- e6) e15)))
(let ((e560 (* (- e6) e12)))
(let ((e561 (f0 e336)))
(let ((e562 (+ e541 e541)))
(let ((e563 (- e292)))
(let ((e564 (+ e279 e499)))
(let ((e565 (* (- e7) e338)))
(let ((e566 (- e51 e78)))
(let ((e567 (- e328)))
(let ((e568 (- e78 e332)))
(let ((e569 (- e331 e552)))
(let ((e570 (ite (p0 e76 e258) 1 0)))
(let ((e571 (- e273 e454)))
(let ((e572 (* e284 (- e5))))
(let ((e573 (* e329 (- e6))))
(let ((e574 (- e294)))
(let ((e575 (- e568 e549)))
(let ((e576 (- e57)))
(let ((e577 (- e552)))
(let ((e578 (* e536 (- e6))))
(let ((e579 (- e333)))
(let ((e580 (- e532)))
(let ((e581 (ite (p0 e24 e285) 1 0)))
(let ((e582 (- e564 e47)))
(let ((e583 (- e318)))
(let ((e584 (- e462 e539)))
(let ((e585 (* e5 e347)))
(let ((e586 (* e63 (- e7))))
(let ((e587 (ite (p0 e287 e582) 1 0)))
(let ((e588 (+ e315 e71)))
(let ((e589 (ite (p0 e43 e25) 1 0)))
(let ((e590 (f0 e41)))
(let ((e591 (- e343 e14)))
(let ((e592 (ite (p0 e62 e67) 1 0)))
(let ((e593 (+ e271 e512)))
(let ((e594 (f0 e52)))
(let ((e595 (ite (p0 e490 e459) 1 0)))
(let ((e596 (- e267 e42)))
(let ((e597 (ite (p0 e291 e21) 1 0)))
(let ((e598 (* e341 e6)))
(let ((e599 (f0 e471)))
(let ((e600 (f0 e482)))
(let ((e601 (ite (p0 e506 e514) 1 0)))
(let ((e602 (- e467)))
(let ((e603 (- e18 e36)))
(let ((e604 (* e7 e19)))
(let ((e605 (f0 e314)))
(let ((e606 (ite (p0 e30 e477) 1 0)))
(let ((e607 (ite (p0 e473 e513) 1 0)))
(let ((e608 (- e458)))
(let ((e609 (* v0 (- e7))))
(let ((e610 (- e514)))
(let ((e611 (ite (p0 e323 e480) 1 0)))
(let ((e612 (+ e66 e267)))
(let ((e613 (- e351)))
(let ((e614 (- e608 e506)))
(let ((e615 (- e339)))
(let ((e616 (f0 e10)))
(let ((e617 (f0 e561)))
(let ((e618 (+ e318 e343)))
(let ((e619 (- e453)))
(let ((e620 (f0 e505)))
(let ((e621 (- e65 e49)))
(let ((e622 (- e257 e587)))
(let ((e623 (- e506 e303)))
(let ((e624 (+ e457 e618)))
(let ((e625 (* e265 e5)))
(let ((e626 (- e293 e586)))
(let ((e627 (f0 e319)))
(let ((e628 (ite (p0 e573 e325) 1 0)))
(let ((e629 (ite (p0 e277 e530) 1 0)))
(let ((e630 (f0 e20)))
(let ((e631 (* e7 e497)))
(let ((e632 (+ e543 e513)))
(let ((e633 (* e296 (- e6))))
(let ((e634 (* e309 (- e7))))
(let ((e635 (ite (p0 e31 e327) 1 0)))
(let ((e636 (* e467 (- e6))))
(let ((e637 (ite (p0 e259 e462) 1 0)))
(let ((e638 (- e292)))
(let ((e639 (- e535 e595)))
(let ((e640 (f0 e317)))
(let ((e641 (ite (p0 e331 e341) 1 0)))
(let ((e642 (f0 e68)))
(let ((e643 (ite (p0 e354 e19) 1 0)))
(let ((e644 (- e263 e454)))
(let ((e645 (- e335 e37)))
(let ((e646 (- e27)))
(let ((e647 (ite (p0 e475 e607) 1 0)))
(let ((e648 (ite (p0 e583 e336) 1 0)))
(let ((e649 (- e587 e635)))
(let ((e650 (+ e262 e627)))
(let ((e651 (* e307 e5)))
(let ((e652 (- e298 e14)))
(let ((e653 (f0 e355)))
(let ((e654 (- e295 e597)))
(let ((e655 (+ v1 e479)))
(let ((e656 (- e316)))
(let ((e657 (- e292 e627)))
(let ((e658 (f0 e292)))
(let ((e659 (f0 e60)))
(let ((e660 (- e45)))
(let ((e661 (+ e59 e341)))
(let ((e662 (f0 e28)))
(let ((e663 (- e26 e603)))
(let ((e664 (- e627 e463)))
(let ((e665 (+ e289 e17)))
(let ((e666 (ite (p0 e288 e13) 1 0)))
(let ((e667 (- e277)))
(let ((e668 (ite (p0 e354 e480) 1 0)))
(let ((e669 (f0 e58)))
(let ((e670 (- e69 e552)))
(let ((e671 (f0 e572)))
(let ((e672 (- e302 e580)))
(let ((e673 (p1 e449)))
(let ((e674 (p1 e208)))
(let ((e675 (p1 e199)))
(let ((e676 (p1 e172)))
(let ((e677 (p1 e448)))
(let ((e678 (p1 e448)))
(let ((e679 (p1 e228)))
(let ((e680 (p1 e439)))
(let ((e681 (p1 e212)))
(let ((e682 (p1 e435)))
(let ((e683 (p1 e234)))
(let ((e684 (p1 e387)))
(let ((e685 (p1 e205)))
(let ((e686 (p1 e414)))
(let ((e687 (p1 e425)))
(let ((e688 (p1 e412)))
(let ((e689 (p1 e251)))
(let ((e690 (p1 e217)))
(let ((e691 (p1 e218)))
(let ((e692 (p1 e220)))
(let ((e693 (p1 e245)))
(let ((e694 (p1 e231)))
(let ((e695 (p1 e378)))
(let ((e696 (p1 e372)))
(let ((e697 (p1 e394)))
(let ((e698 (p1 e174)))
(let ((e699 (p1 e169)))
(let ((e700 (p1 e163)))
(let ((e701 (p1 e186)))
(let ((e702 (p1 e441)))
(let ((e703 (p1 e378)))
(let ((e704 (p1 e368)))
(let ((e705 (p1 e254)))
(let ((e706 (p1 e236)))
(let ((e707 (p1 e382)))
(let ((e708 (p1 e416)))
(let ((e709 (p1 e402)))
(let ((e710 (p1 e366)))
(let ((e711 (p1 e181)))
(let ((e712 (p1 e389)))
(let ((e713 (p1 e225)))
(let ((e714 (p1 e237)))
(let ((e715 (p1 e176)))
(let ((e716 (p1 e377)))
(let ((e717 (p1 e431)))
(let ((e718 (p1 e440)))
(let ((e719 (p1 e245)))
(let ((e720 (p1 e446)))
(let ((e721 (p1 e252)))
(let ((e722 (p1 e172)))
(let ((e723 (p1 e247)))
(let ((e724 (p1 e250)))
(let ((e725 (p1 e223)))
(let ((e726 (p1 e167)))
(let ((e727 (p1 e405)))
(let ((e728 (p1 e386)))
(let ((e729 (p1 e365)))
(let ((e730 (p1 e443)))
(let ((e731 (p1 e225)))
(let ((e732 (p1 e254)))
(let ((e733 (p1 e177)))
(let ((e734 (p1 e239)))
(let ((e735 (p1 e436)))
(let ((e736 (p1 e79)))
(let ((e737 (p1 e189)))
(let ((e738 (p1 e193)))
(let ((e739 (p1 e209)))
(let ((e740 (p1 e217)))
(let ((e741 (p1 e367)))
(let ((e742 (p1 e418)))
(let ((e743 (p1 e379)))
(let ((e744 (p1 e399)))
(let ((e745 (p1 e233)))
(let ((e746 (p1 e244)))
(let ((e747 (p1 e428)))
(let ((e748 (p1 e234)))
(let ((e749 (p1 e396)))
(let ((e750 (p1 e400)))
(let ((e751 (p1 e200)))
(let ((e752 (p1 e373)))
(let ((e753 (p1 e230)))
(let ((e754 (p1 e438)))
(let ((e755 (p1 e403)))
(let ((e756 (p1 e181)))
(let ((e757 (p1 e164)))
(let ((e758 (p1 e224)))
(let ((e759 (p1 e364)))
(let ((e760 (p1 e238)))
(let ((e761 (p1 e411)))
(let ((e762 (p1 e242)))
(let ((e763 (p1 e210)))
(let ((e764 (p1 e173)))
(let ((e765 (p1 e420)))
(let ((e766 (p1 e253)))
(let ((e767 (p1 e405)))
(let ((e768 (p1 e410)))
(let ((e769 (p1 v3)))
(let ((e770 (p1 e230)))
(let ((e771 (p1 e215)))
(let ((e772 (p1 e406)))
(let ((e773 (p1 e168)))
(let ((e774 (p1 e216)))
(let ((e775 (p1 e226)))
(let ((e776 (p1 e160)))
(let ((e777 (p1 e171)))
(let ((e778 (p1 e246)))
(let ((e779 (p1 e223)))
(let ((e780 (p1 v3)))
(let ((e781 (p1 e404)))
(let ((e782 (p1 e423)))
(let ((e783 (p1 e372)))
(let ((e784 (p1 e393)))
(let ((e785 (p1 e166)))
(let ((e786 (p1 e180)))
(let ((e787 (p1 e419)))
(let ((e788 (p1 e249)))
(let ((e789 (p1 e366)))
(let ((e790 (p1 e239)))
(let ((e791 (p1 e422)))
(let ((e792 (p1 e374)))
(let ((e793 (p1 e165)))
(let ((e794 (p1 e427)))
(let ((e795 (p1 e394)))
(let ((e796 (p1 e424)))
(let ((e797 (p1 e391)))
(let ((e798 (p1 e182)))
(let ((e799 (p1 e376)))
(let ((e800 (p1 e370)))
(let ((e801 (p1 e442)))
(let ((e802 (p1 e187)))
(let ((e803 (p1 e247)))
(let ((e804 (p1 e380)))
(let ((e805 (p1 e211)))
(let ((e806 (p1 e440)))
(let ((e807 (p1 e394)))
(let ((e808 (p1 e161)))
(let ((e809 (p1 e375)))
(let ((e810 (p1 e388)))
(let ((e811 (p1 e419)))
(let ((e812 (p1 e205)))
(let ((e813 (p1 e413)))
(let ((e814 (p1 e188)))
(let ((e815 (p1 e407)))
(let ((e816 (p1 e207)))
(let ((e817 (p1 e227)))
(let ((e818 (p1 e188)))
(let ((e819 (p1 e435)))
(let ((e820 (p1 e201)))
(let ((e821 (p1 e381)))
(let ((e822 (p1 e216)))
(let ((e823 (p1 e408)))
(let ((e824 (p1 e202)))
(let ((e825 (p1 e367)))
(let ((e826 (p1 e221)))
(let ((e827 (p1 e427)))
(let ((e828 (p1 e404)))
(let ((e829 (p1 e241)))
(let ((e830 (p1 e417)))
(let ((e831 (p1 e183)))
(let ((e832 (p1 e194)))
(let ((e833 (p1 e214)))
(let ((e834 (p1 e222)))
(let ((e835 (p1 e407)))
(let ((e836 (p1 e219)))
(let ((e837 (p1 e421)))
(let ((e838 (p1 e448)))
(let ((e839 (p1 e190)))
(let ((e840 (p1 e379)))
(let ((e841 (p1 e180)))
(let ((e842 (p1 e387)))
(let ((e843 (p1 e252)))
(let ((e844 (p1 e361)))
(let ((e845 (p1 e235)))
(let ((e846 (p1 e385)))
(let ((e847 (p1 e443)))
(let ((e848 (p1 e201)))
(let ((e849 (p1 e419)))
(let ((e850 (p1 e390)))
(let ((e851 (p1 e248)))
(let ((e852 (p1 e425)))
(let ((e853 (p1 e447)))
(let ((e854 (p1 e419)))
(let ((e855 (p1 e162)))
(let ((e856 (p1 e358)))
(let ((e857 (p1 e391)))
(let ((e858 (p1 e451)))
(let ((e859 (p1 e225)))
(let ((e860 (p1 e168)))
(let ((e861 (p1 e450)))
(let ((e862 (p1 e232)))
(let ((e863 (p1 e176)))
(let ((e864 (p1 e383)))
(let ((e865 (p1 e395)))
(let ((e866 (p1 e206)))
(let ((e867 (p1 e371)))
(let ((e868 (p1 e240)))
(let ((e869 (p1 e369)))
(let ((e870 (p1 e216)))
(let ((e871 (p1 e437)))
(let ((e872 (p1 e202)))
(let ((e873 (p1 e432)))
(let ((e874 (p1 e195)))
(let ((e875 (p1 e171)))
(let ((e876 (p1 e178)))
(let ((e877 (p1 e229)))
(let ((e878 (p1 e426)))
(let ((e879 (p1 e399)))
(let ((e880 (p1 e241)))
(let ((e881 (p1 e367)))
(let ((e882 (p1 e252)))
(let ((e883 (p1 e236)))
(let ((e884 (p1 e184)))
(let ((e885 (p1 e219)))
(let ((e886 (p1 e174)))
(let ((e887 (p1 e359)))
(let ((e888 (p1 e204)))
(let ((e889 (p1 e198)))
(let ((e890 (p1 e225)))
(let ((e891 (p1 e397)))
(let ((e892 (p1 e403)))
(let ((e893 (p1 e226)))
(let ((e894 (p1 e170)))
(let ((e895 (p1 e415)))
(let ((e896 (p1 e175)))
(let ((e897 (p1 e198)))
(let ((e898 (p1 e222)))
(let ((e899 (p1 e400)))
(let ((e900 (p1 e255)))
(let ((e901 (p1 e434)))
(let ((e902 (p1 e191)))
(let ((e903 (p1 e418)))
(let ((e904 (p1 e445)))
(let ((e905 (p1 e373)))
(let ((e906 (p1 e398)))
(let ((e907 (p1 e409)))
(let ((e908 (p1 e185)))
(let ((e909 (p1 e384)))
(let ((e910 (p1 e401)))
(let ((e911 (p1 e230)))
(let ((e912 (p1 e213)))
(let ((e913 (p1 e243)))
(let ((e914 (p1 e196)))
(let ((e915 (p1 v4)))
(let ((e916 (p1 e416)))
(let ((e917 (p1 e159)))
(let ((e918 (p1 e368)))
(let ((e919 (p1 e363)))
(let ((e920 (p1 e432)))
(let ((e921 (p1 e444)))
(let ((e922 (p1 e365)))
(let ((e923 (p1 e402)))
(let ((e924 (p1 e161)))
(let ((e925 (p1 e362)))
(let ((e926 (p1 e239)))
(let ((e927 (p1 e430)))
(let ((e928 (p1 e189)))
(let ((e929 (p1 e203)))
(let ((e930 (p1 e382)))
(let ((e931 (p1 e398)))
(let ((e932 (p1 e433)))
(let ((e933 (p1 e179)))
(let ((e934 (p1 e164)))
(let ((e935 (p1 e358)))
(let ((e936 (p1 e360)))
(let ((e937 (p1 e255)))
(let ((e938 (p1 e431)))
(let ((e939 (p1 e184)))
(let ((e940 (p1 e392)))
(let ((e941 (p1 e197)))
(let ((e942 (p1 e208)))
(let ((e943 (p1 e207)))
(let ((e944 (p1 e192)))
(let ((e945 (p1 e429)))
(let ((e946 (= e29 e458)))
(let ((e947 (distinct e298 e455)))
(let ((e948 (distinct e34 e514)))
(let ((e949 (> e71 e552)))
(let ((e950 (p0 e512 e17)))
(let ((e951 (<= e344 e466)))
(let ((e952 (< e484 e281)))
(let ((e953 (>= e634 e608)))
(let ((e954 (p0 e658 e661)))
(let ((e955 (distinct e564 v2)))
(let ((e956 (<= e567 e67)))
(let ((e957 (= e603 e356)))
(let ((e958 (<= e507 e625)))
(let ((e959 (= e524 e659)))
(let ((e960 (distinct e303 e56)))
(let ((e961 (= e585 e472)))
(let ((e962 (< e671 e48)))
(let ((e963 (>= e472 e27)))
(let ((e964 (= e332 e650)))
(let ((e965 (>= e40 e511)))
(let ((e966 (= e14 e553)))
(let ((e967 (< e589 e644)))
(let ((e968 (>= e579 e570)))
(let ((e969 (>= e636 e259)))
(let ((e970 (>= e518 e14)))
(let ((e971 (<= e561 e647)))
(let ((e972 (= e605 e504)))
(let ((e973 (< e353 e625)))
(let ((e974 (> e589 e561)))
(let ((e975 (> e333 e290)))
(let ((e976 (p0 e293 e282)))
(let ((e977 (>= e335 e605)))
(let ((e978 (p0 e601 e292)))
(let ((e979 (<= e469 e482)))
(let ((e980 (= e502 e545)))
(let ((e981 (< e10 e658)))
(let ((e982 (p0 e316 e24)))
(let ((e983 (p0 e353 e60)))
(let ((e984 (distinct e480 e345)))
(let ((e985 (>= e645 e661)))
(let ((e986 (>= e338 e647)))
(let ((e987 (> e606 e257)))
(let ((e988 (distinct e625 e21)))
(let ((e989 (>= e520 e33)))
(let ((e990 (<= e480 e629)))
(let ((e991 (p0 e655 e653)))
(let ((e992 (= e274 e645)))
(let ((e993 (> e667 e612)))
(let ((e994 (> e22 e617)))
(let ((e995 (<= e297 e20)))
(let ((e996 (< e612 e666)))
(let ((e997 (>= e651 e299)))
(let ((e998 (distinct e29 e508)))
(let ((e999 (= e551 e578)))
(let ((e1000 (< e343 e496)))
(let ((e1001 (< e321 e305)))
(let ((e1002 (= e649 e612)))
(let ((e1003 (= e526 e311)))
(let ((e1004 (< e630 e328)))
(let ((e1005 (p0 e44 e497)))
(let ((e1006 (> e621 e641)))
(let ((e1007 (>= e346 e284)))
(let ((e1008 (> e572 e586)))
(let ((e1009 (> e590 e75)))
(let ((e1010 (>= e530 e9)))
(let ((e1011 (p0 e78 e54)))
(let ((e1012 (<= e324 e495)))
(let ((e1013 (= e266 e558)))
(let ((e1014 (< e626 e344)))
(let ((e1015 (distinct e454 e641)))
(let ((e1016 (<= e53 e485)))
(let ((e1017 (<= e323 e610)))
(let ((e1018 (>= e465 e11)))
(let ((e1019 (>= e479 e597)))
(let ((e1020 (= e533 e65)))
(let ((e1021 (distinct e460 e305)))
(let ((e1022 (< e19 e323)))
(let ((e1023 (p0 e342 e51)))
(let ((e1024 (distinct e584 e74)))
(let ((e1025 (= e530 e32)))
(let ((e1026 (= e571 e643)))
(let ((e1027 (= e326 e459)))
(let ((e1028 (>= e534 e29)))
(let ((e1029 (< e568 e256)))
(let ((e1030 (< e632 e648)))
(let ((e1031 (< e55 e355)))
(let ((e1032 (> e265 e662)))
(let ((e1033 (>= e563 e640)))
(let ((e1034 (> e541 e45)))
(let ((e1035 (< e350 e580)))
(let ((e1036 (>= e301 e589)))
(let ((e1037 (distinct e18 e526)))
(let ((e1038 (<= e665 e309)))
(let ((e1039 (> e295 e504)))
(let ((e1040 (>= e263 e256)))
(let ((e1041 (distinct e516 e549)))
(let ((e1042 (< e343 e38)))
(let ((e1043 (p0 e510 e21)))
(let ((e1044 (distinct e315 e534)))
(let ((e1045 (distinct e268 e496)))
(let ((e1046 (>= e35 e355)))
(let ((e1047 (>= e258 e571)))
(let ((e1048 (< e596 e262)))
(let ((e1049 (p0 e647 e319)))
(let ((e1050 (>= e647 e665)))
(let ((e1051 (= e560 e16)))
(let ((e1052 (<= e502 e633)))
(let ((e1053 (distinct e28 e619)))
(let ((e1054 (> e591 e478)))
(let ((e1055 (distinct e294 e25)))
(let ((e1056 (distinct e535 e587)))
(let ((e1057 (p0 e481 e286)))
(let ((e1058 (<= e618 e537)))
(let ((e1059 (<= e327 e298)))
(let ((e1060 (= e582 e650)))
(let ((e1061 (> e329 e548)))
(let ((e1062 (= e506 e589)))
(let ((e1063 (<= e547 e478)))
(let ((e1064 (= e15 e50)))
(let ((e1065 (distinct e344 e281)))
(let ((e1066 (distinct e633 e24)))
(let ((e1067 (= e513 e488)))
(let ((e1068 (<= e596 e514)))
(let ((e1069 (< e13 e66)))
(let ((e1070 (distinct e501 e541)))
(let ((e1071 (> e292 e302)))
(let ((e1072 (= e322 e332)))
(let ((e1073 (distinct e557 e36)))
(let ((e1074 (= e337 e492)))
(let ((e1075 (p0 e517 e15)))
(let ((e1076 (<= e639 e532)))
(let ((e1077 (p0 e555 e596)))
(let ((e1078 (>= e565 e515)))
(let ((e1079 (> e49 e480)))
(let ((e1080 (distinct e668 e532)))
(let ((e1081 (p0 e598 e606)))
(let ((e1082 (>= e669 e282)))
(let ((e1083 (>= e45 e507)))
(let ((e1084 (>= e315 e299)))
(let ((e1085 (distinct e516 e268)))
(let ((e1086 (>= e70 e353)))
(let ((e1087 (distinct e261 e655)))
(let ((e1088 (= e453 e625)))
(let ((e1089 (p0 e327 e616)))
(let ((e1090 (> e617 e273)))
(let ((e1091 (> e633 e464)))
(let ((e1092 (distinct e39 e642)))
(let ((e1093 (distinct e279 e293)))
(let ((e1094 (distinct e264 e549)))
(let ((e1095 (< e573 e311)))
(let ((e1096 (= e306 e262)))
(let ((e1097 (>= e609 e298)))
(let ((e1098 (>= e18 e618)))
(let ((e1099 (>= e613 e554)))
(let ((e1100 (p0 e520 e301)))
(let ((e1101 (distinct e69 e574)))
(let ((e1102 (> e468 e663)))
(let ((e1103 (<= e316 e625)))
(let ((e1104 (> e76 e332)))
(let ((e1105 (p0 e499 e627)))
(let ((e1106 (<= e588 e71)))
(let ((e1107 (distinct e488 e511)))
(let ((e1108 (distinct e496 e531)))
(let ((e1109 (<= e70 e351)))
(let ((e1110 (= e498 e628)))
(let ((e1111 (>= e296 e586)))
(let ((e1112 (>= e39 e672)))
(let ((e1113 (p0 e304 e527)))
(let ((e1114 (distinct e505 e639)))
(let ((e1115 (p0 v1 e56)))
(let ((e1116 (= e521 e596)))
(let ((e1117 (>= e274 e356)))
(let ((e1118 (>= e52 e557)))
(let ((e1119 (> e545 e452)))
(let ((e1120 (distinct e278 e520)))
(let ((e1121 (p0 e313 e637)))
(let ((e1122 (< e272 e35)))
(let ((e1123 (< e36 e354)))
(let ((e1124 (distinct e607 e523)))
(let ((e1125 (< e509 e39)))
(let ((e1126 (p0 e540 e326)))
(let ((e1127 (>= e660 e631)))
(let ((e1128 (> e623 e500)))
(let ((e1129 (>= e73 e635)))
(let ((e1130 (> e456 e529)))
(let ((e1131 (distinct e348 e339)))
(let ((e1132 (distinct e664 e580)))
(let ((e1133 (<= e658 e626)))
(let ((e1134 (p0 e343 e651)))
(let ((e1135 (distinct e522 e502)))
(let ((e1136 (p0 e632 e56)))
(let ((e1137 (= e275 e276)))
(let ((e1138 (> e580 e494)))
(let ((e1139 (= e8 e74)))
(let ((e1140 (distinct e477 e10)))
(let ((e1141 (> e272 e290)))
(let ((e1142 (< e357 e556)))
(let ((e1143 (= e323 e34)))
(let ((e1144 (> e668 e564)))
(let ((e1145 (>= e525 e575)))
(let ((e1146 (<= e318 e665)))
(let ((e1147 (= e62 e500)))
(let ((e1148 (p0 e355 e652)))
(let ((e1149 (p0 e670 e338)))
(let ((e1150 (>= e638 e615)))
(let ((e1151 (< e543 e268)))
(let ((e1152 (= e270 e471)))
(let ((e1153 (> e542 e594)))
(let ((e1154 (<= e57 e12)))
(let ((e1155 (<= e278 e584)))
(let ((e1156 (<= e280 e644)))
(let ((e1157 (distinct e462 e499)))
(let ((e1158 (> e486 e332)))
(let ((e1159 (= e334 v1)))
(let ((e1160 (<= e599 e646)))
(let ((e1161 (< e600 e663)))
(let ((e1162 (<= e66 e636)))
(let ((e1163 (<= e31 e346)))
(let ((e1164 (> e483 e357)))
(let ((e1165 (= e472 e59)))
(let ((e1166 (p0 e611 e665)))
(let ((e1167 (= e63 e9)))
(let ((e1168 (> e314 e648)))
(let ((e1169 (distinct e328 e610)))
(let ((e1170 (p0 e283 e469)))
(let ((e1171 (>= e493 e473)))
(let ((e1172 (> e490 e606)))
(let ((e1173 (distinct e489 e511)))
(let ((e1174 (p0 e287 e549)))
(let ((e1175 (>= e464 e624)))
(let ((e1176 (> e260 e301)))
(let ((e1177 (<= e325 e567)))
(let ((e1178 (distinct e538 e270)))
(let ((e1179 (< e503 e600)))
(let ((e1180 (distinct e352 e606)))
(let ((e1181 (<= e317 e272)))
(let ((e1182 (<= e258 e514)))
(let ((e1183 (p0 e19 e73)))
(let ((e1184 (distinct e539 e602)))
(let ((e1185 (>= e626 e275)))
(let ((e1186 (= e640 e23)))
(let ((e1187 (p0 e310 e612)))
(let ((e1188 (< e308 e75)))
(let ((e1189 (p0 e43 e655)))
(let ((e1190 (>= e487 e287)))
(let ((e1191 (< e71 e620)))
(let ((e1192 (> e454 e501)))
(let ((e1193 (p0 e632 e52)))
(let ((e1194 (> e42 e272)))
(let ((e1195 (<= e640 e573)))
(let ((e1196 (> e47 e461)))
(let ((e1197 (distinct e596 e641)))
(let ((e1198 (= e26 e12)))
(let ((e1199 (= e292 e641)))
(let ((e1200 (<= e46 e74)))
(let ((e1201 (>= e585 e613)))
(let ((e1202 (> e486 e452)))
(let ((e1203 (distinct e658 e283)))
(let ((e1204 (distinct e350 e558)))
(let ((e1205 (>= e654 e276)))
(let ((e1206 (distinct e579 e503)))
(let ((e1207 (p0 e349 e293)))
(let ((e1208 (< e528 e579)))
(let ((e1209 (= e622 e668)))
(let ((e1210 (< e69 e307)))
(let ((e1211 (>= e49 e466)))
(let ((e1212 (distinct e71 e342)))
(let ((e1213 (p0 e488 e630)))
(let ((e1214 (p0 e475 e482)))
(let ((e1215 (>= e68 e350)))
(let ((e1216 (= e302 e582)))
(let ((e1217 (> e332 e62)))
(let ((e1218 (<= e64 e469)))
(let ((e1219 (distinct e41 e56)))
(let ((e1220 (> e628 e604)))
(let ((e1221 (< e670 e265)))
(let ((e1222 (distinct e470 e304)))
(let ((e1223 (distinct e467 e549)))
(let ((e1224 (p0 e347 e70)))
(let ((e1225 (<= e317 e306)))
(let ((e1226 (p0 e72 e41)))
(let ((e1227 (> e573 e614)))
(let ((e1228 (< e490 e498)))
(let ((e1229 (p0 e592 e70)))
(let ((e1230 (= e455 e642)))
(let ((e1231 (= e648 e614)))
(let ((e1232 (distinct e583 e341)))
(let ((e1233 (< e657 e634)))
(let ((e1234 (distinct e474 e479)))
(let ((e1235 (p0 e655 e317)))
(let ((e1236 (<= e291 e616)))
(let ((e1237 (p0 e52 e662)))
(let ((e1238 (<= v0 e608)))
(let ((e1239 (< e37 e319)))
(let ((e1240 (p0 e354 e653)))
(let ((e1241 (>= e307 e459)))
(let ((e1242 (distinct e478 e313)))
(let ((e1243 (< e499 e314)))
(let ((e1244 (distinct e288 e49)))
(let ((e1245 (>= e300 e13)))
(let ((e1246 (> e278 e66)))
(let ((e1247 (p0 e61 e504)))
(let ((e1248 (p0 e457 e493)))
(let ((e1249 (distinct e559 e78)))
(let ((e1250 (p0 e47 e468)))
(let ((e1251 (distinct e289 e355)))
(let ((e1252 (<= e491 e23)))
(let ((e1253 (<= e302 e261)))
(let ((e1254 (distinct e271 e669)))
(let ((e1255 (distinct e519 e638)))
(let ((e1256 (p0 e320 e566)))
(let ((e1257 (> e74 e55)))
(let ((e1258 (<= e563 e592)))
(let ((e1259 (<= e267 e610)))
(let ((e1260 (p0 e277 e354)))
(let ((e1261 (p0 e10 e609)))
(let ((e1262 (distinct e29 e454)))
(let ((e1263 (>= e544 e574)))
(let ((e1264 (< e269 e30)))
(let ((e1265 (distinct e593 e576)))
(let ((e1266 (distinct e463 e11)))
(let ((e1267 (= e666 e662)))
(let ((e1268 (> e330 e500)))
(let ((e1269 (distinct e595 e521)))
(let ((e1270 (< e605 e664)))
(let ((e1271 (p0 e58 e545)))
(let ((e1272 (>= e310 e615)))
(let ((e1273 (>= e592 e287)))
(let ((e1274 (< e313 e543)))
(let ((e1275 (>= e343 e567)))
(let ((e1276 (distinct e274 e551)))
(let ((e1277 (<= e531 e645)))
(let ((e1278 (<= e476 e504)))
(let ((e1279 (<= e656 e578)))
(let ((e1280 (= e338 e651)))
(let ((e1281 (>= e316 e525)))
(let ((e1282 (<= e285 e355)))
(let ((e1283 (p0 e577 e466)))
(let ((e1284 (p0 e569 e648)))
(let ((e1285 (p0 e485 e506)))
(let ((e1286 (distinct e294 e628)))
(let ((e1287 (<= e35 e263)))
(let ((e1288 (distinct e340 e588)))
(let ((e1289 (< e312 e564)))
(let ((e1290 (> e536 e455)))
(let ((e1291 (> e550 e56)))
(let ((e1292 (< e546 e594)))
(let ((e1293 (distinct e347 e278)))
(let ((e1294 (p0 e77 e330)))
(let ((e1295 (distinct e331 e348)))
(let ((e1296 (= e336 e585)))
(let ((e1297 (> e581 e539)))
(let ((e1298 (p0 e551 e69)))
(let ((e1299 (<= e648 e329)))
(let ((e1300 (= e562 e485)))
(let ((e1301 (xor e136 e951)))
(let ((e1302 (ite e1234 e811 e1022)))
(let ((e1303 (and e1228 e915)))
(let ((e1304 (and e146 e736)))
(let ((e1305 (and e706 e1242)))
(let ((e1306 (xor e870 e1087)))
(let ((e1307 (=> e1169 e719)))
(let ((e1308 (or e139 e1291)))
(let ((e1309 (not e976)))
(let ((e1310 (xor e1162 e1301)))
(let ((e1311 (=> e1180 e91)))
(let ((e1312 (= e821 e1272)))
(let ((e1313 (ite e1118 e825 e1010)))
(let ((e1314 (and e751 e1142)))
(let ((e1315 (and e982 e1075)))
(let ((e1316 (xor e1016 e1285)))
(let ((e1317 (not e909)))
(let ((e1318 (= e859 e777)))
(let ((e1319 (=> e1044 e988)))
(let ((e1320 (=> e873 e704)))
(let ((e1321 (or e1160 e1250)))
(let ((e1322 (=> e1107 e776)))
(let ((e1323 (or e780 e942)))
(let ((e1324 (xor e86 e1113)))
(let ((e1325 (=> e759 e989)))
(let ((e1326 (or e1067 e1223)))
(let ((e1327 (= e1076 e106)))
(let ((e1328 (= e107 e1289)))
(let ((e1329 (not e1240)))
(let ((e1330 (ite e841 e690 e1224)))
(let ((e1331 (and e1052 e1124)))
(let ((e1332 (ite e856 e738 e1213)))
(let ((e1333 (=> e1094 e1147)))
(let ((e1334 (ite e929 e1130 e1265)))
(let ((e1335 (and e773 e157)))
(let ((e1336 (or e960 e696)))
(let ((e1337 (=> e912 e917)))
(let ((e1338 (xor e1325 e1093)))
(let ((e1339 (and e1320 e1262)))
(let ((e1340 (or e928 e746)))
(let ((e1341 (ite e1000 e117 e145)))
(let ((e1342 (and e151 e933)))
(let ((e1343 (not e115)))
(let ((e1344 (ite e826 e1035 e1215)))
(let ((e1345 (=> e1123 e881)))
(let ((e1346 (not e721)))
(let ((e1347 (not e783)))
(let ((e1348 (and e1270 e879)))
(let ((e1349 (not e154)))
(let ((e1350 (xor e83 e762)))
(let ((e1351 (or e1079 e772)))
(let ((e1352 (= e1179 e971)))
(let ((e1353 (and e802 e846)))
(let ((e1354 (not e1127)))
(let ((e1355 (xor e82 e1120)))
(let ((e1356 (=> e1254 e1064)))
(let ((e1357 (and e1164 e1227)))
(let ((e1358 (and e1108 e1149)))
(let ((e1359 (ite e1349 e120 e801)))
(let ((e1360 (or e1210 e853)))
(let ((e1361 (not e1062)))
(let ((e1362 (not e1330)))
(let ((e1363 (not e1317)))
(let ((e1364 (=> e1354 e1220)))
(let ((e1365 (ite e113 e935 e748)))
(let ((e1366 (=> e1040 e1323)))
(let ((e1367 (xor e799 e758)))
(let ((e1368 (and e1314 e1216)))
(let ((e1369 (not e1202)))
(let ((e1370 (ite e1297 e796 e1357)))
(let ((e1371 (ite e1050 e1030 e1141)))
(let ((e1372 (=> e1103 e786)))
(let ((e1373 (or e788 e884)))
(let ((e1374 (and e893 e987)))
(let ((e1375 (xor e127 e683)))
(let ((e1376 (=> e803 e1139)))
(let ((e1377 (ite e781 e985 e914)))
(let ((e1378 (or e1279 e1205)))
(let ((e1379 (xor e1051 e135)))
(let ((e1380 (and e1053 e1088)))
(let ((e1381 (ite e800 e1165 e1245)))
(let ((e1382 (or e707 e1178)))
(let ((e1383 (or e952 e1286)))
(let ((e1384 (= e964 e1364)))
(let ((e1385 (= e1056 e1043)))
(let ((e1386 (ite e147 e1377 e911)))
(let ((e1387 (and e1309 e1167)))
(let ((e1388 (or e682 e1305)))
(let ((e1389 (ite e1282 e130 e1092)))
(let ((e1390 (or e938 e926)))
(let ((e1391 (= e718 e1096)))
(let ((e1392 (or e1384 e798)))
(let ((e1393 (xor e1197 e85)))
(let ((e1394 (ite e1338 e1263 e1023)))
(let ((e1395 (=> e1252 e907)))
(let ((e1396 (= e993 e684)))
(let ((e1397 (not e742)))
(let ((e1398 (ite e1159 e784 e1350)))
(let ((e1399 (and e1172 e1345)))
(let ((e1400 (=> e875 e676)))
(let ((e1401 (ite e1230 e753 e897)))
(let ((e1402 (=> e996 e97)))
(let ((e1403 (not e934)))
(let ((e1404 (xor e765 e805)))
(let ((e1405 (not e1359)))
(let ((e1406 (or e1140 e1038)))
(let ((e1407 (or e1039 e1024)))
(let ((e1408 (= e1352 e99)))
(let ((e1409 (not e688)))
(let ((e1410 (and e148 e1267)))
(let ((e1411 (ite e775 e992 e808)))
(let ((e1412 (xor e709 e1389)))
(let ((e1413 (ite e744 e1191 e1342)))
(let ((e1414 (not e1116)))
(let ((e1415 (=> e1186 e1379)))
(let ((e1416 (ite e686 e1136 e1321)))
(let ((e1417 (or e1378 e1341)))
(let ((e1418 (or e1211 e1151)))
(let ((e1419 (ite e1353 e105 e1418)))
(let ((e1420 (=> e1233 e903)))
(let ((e1421 (xor e844 e820)))
(let ((e1422 (=> e1332 e1025)))
(let ((e1423 (and e1161 e1398)))
(let ((e1424 (and e1185 e1106)))
(let ((e1425 (xor e1347 e905)))
(let ((e1426 (=> e851 e715)))
(let ((e1427 (xor e1283 e919)))
(let ((e1428 (not e1404)))
(let ((e1429 (or e1203 e1381)))
(let ((e1430 (ite e1402 e1415 e1002)))
(let ((e1431 (xor e741 e1156)))
(let ((e1432 (or e956 e946)))
(let ((e1433 (xor e699 e1372)))
(let ((e1434 (not e1276)))
(let ((e1435 (ite e679 e128 e1409)))
(let ((e1436 (= e895 e890)))
(let ((e1437 (ite e1412 e1368 e713)))
(let ((e1438 (and e1411 e158)))
(let ((e1439 (=> e1225 e1078)))
(let ((e1440 (ite e1288 e1190 e1212)))
(let ((e1441 (ite e840 e1403 e1066)))
(let ((e1442 (and e111 e931)))
(let ((e1443 (and e1059 e756)))
(let ((e1444 (= e1133 e1422)))
(let ((e1445 (not e774)))
(let ((e1446 (=> e750 e1299)))
(let ((e1447 (= e1302 e121)))
(let ((e1448 (ite e1193 e725 e834)))
(let ((e1449 (xor e1125 e156)))
(let ((e1450 (and e1391 e140)))
(let ((e1451 (= e1196 e1304)))
(let ((e1452 (and e906 e1006)))
(let ((e1453 (=> e1348 e1206)))
(let ((e1454 (=> e918 e149)))
(let ((e1455 (xor e1448 e1229)))
(let ((e1456 (and e1131 e1155)))
(let ((e1457 (and e689 e1181)))
(let ((e1458 (ite e984 e712 e747)))
(let ((e1459 (or e1268 e898)))
(let ((e1460 (not e1306)))
(let ((e1461 (ite e837 e880 e114)))
(let ((e1462 (not e904)))
(let ((e1463 (xor e1447 e886)))
(let ((e1464 (ite e797 e806 e101)))
(let ((e1465 (ite e708 e152 e1077)))
(let ((e1466 (ite e818 e930 e1117)))
(let ((e1467 (=> e916 e1358)))
(let ((e1468 (and e1442 e1443)))
(let ((e1469 (=> e829 e1068)))
(let ((e1470 (or e1037 e1362)))
(let ((e1471 (and e743 e694)))
(let ((e1472 (not e968)))
(let ((e1473 (= e997 e932)))
(let ((e1474 (or e138 e832)))
(let ((e1475 (= e1072 e816)))
(let ((e1476 (= e767 e761)))
(let ((e1477 (not e900)))
(let ((e1478 (not e735)))
(let ((e1479 (ite e134 e141 e1431)))
(let ((e1480 (ite e1458 e1222 e994)))
(let ((e1481 (=> e842 e1476)))
(let ((e1482 (not e1020)))
(let ((e1483 (not e1255)))
(let ((e1484 (ite e1005 e1031 e1400)))
(let ((e1485 (=> e698 e1316)))
(let ((e1486 (=> e1445 e142)))
(let ((e1487 (=> e1195 e1311)))
(let ((e1488 (and e949 e925)))
(let ((e1489 (not e1171)))
(let ((e1490 (or e760 e701)))
(let ((e1491 (= e986 e1417)))
(let ((e1492 (= e998 e778)))
(let ((e1493 (not e1410)))
(let ((e1494 (and e921 e122)))
(let ((e1495 (or e845 e823)))
(let ((e1496 (or e828 e1009)))
(let ((e1497 (ite e1394 e1237 e867)))
(let ((e1498 (xor e1260 e727)))
(let ((e1499 (=> e1182 e1217)))
(let ((e1500 (= e1425 e757)))
(let ((e1501 (=> e1424 e1462)))
(let ((e1502 (xor e717 e153)))
(let ((e1503 (=> e852 e1421)))
(let ((e1504 (=> e947 e1310)))
(let ((e1505 (ite e789 e1429 e1097)))
(let ((e1506 (and e1012 e129)))
(let ((e1507 (=> e1360 e714)))
(let ((e1508 (and e766 e1296)))
(let ((e1509 (xor e899 e1273)))
(let ((e1510 (or e790 e887)))
(let ((e1511 (xor e1441 e858)))
(let ((e1512 (and e1326 e1157)))
(let ((e1513 (= e860 e983)))
(let ((e1514 (=> e81 e1490)))
(let ((e1515 (= e125 e1239)))
(let ((e1516 (ite e695 e839 e731)))
(let ((e1517 (and e1340 e970)))
(let ((e1518 (and e1339 e1503)))
(let ((e1519 (xor e1365 e1501)))
(let ((e1520 (or e862 e937)))
(let ((e1521 (= e1249 e1440)))
(let ((e1522 (and e1397 e1110)))
(let ((e1523 (or e863 e131)))
(let ((e1524 (= e892 e1483)))
(let ((e1525 (ite e1208 e703 e961)))
(let ((e1526 (or e1135 e1017)))
(let ((e1527 (=> e979 e1063)))
(let ((e1528 (=> e1014 e913)))
(let ((e1529 (or e80 e850)))
(let ((e1530 (ite e92 e1452 e755)))
(let ((e1531 (and e116 e90)))
(let ((e1532 (ite e1453 e1219 e1248)))
(let ((e1533 (xor e1293 e923)))
(let ((e1534 (not e1475)))
(let ((e1535 (=> e827 e779)))
(let ((e1536 (= e1525 e1469)))
(let ((e1537 (not e782)))
(let ((e1538 (or e133 e1533)))
(let ((e1539 (= e1235 e1496)))
(let ((e1540 (= e150 e88)))
(let ((e1541 (or e1042 e1258)))
(let ((e1542 (and e739 e972)))
(let ((e1543 (and e1054 e868)))
(let ((e1544 (xor e1194 e1082)))
(let ((e1545 (or e1137 e941)))
(let ((e1546 (xor e889 e1502)))
(let ((e1547 (= e1488 e1374)))
(let ((e1548 (and e1112 e894)))
(let ((e1549 (or e962 e869)))
(let ((e1550 (and e687 e1061)))
(let ((e1551 (ite e836 e1376 e1464)))
(let ((e1552 (=> e1383 e680)))
(let ((e1553 (not e754)))
(let ((e1554 (xor e807 e878)))
(let ((e1555 (= e1271 e936)))
(let ((e1556 (or e692 e977)))
(let ((e1557 (and e95 e874)))
(let ((e1558 (xor e1232 e871)))
(let ((e1559 (or e1526 e1344)))
(let ((e1560 (ite e1473 e1370 e745)))
(let ((e1561 (ite e1540 e681 e1253)))
(let ((e1562 (not e1084)))
(let ((e1563 (and e1527 e763)))
(let ((e1564 (= e1450 e1150)))
(let ((e1565 (=> e902 e1484)))
(let ((e1566 (or e93 e1034)))
(let ((e1567 (not e1395)))
(let ((e1568 (or e939 e1204)))
(let ((e1569 (= e966 e787)))
(let ((e1570 (and e96 e1013)))
(let ((e1571 (or e1168 e1523)))
(let ((e1572 (xor e849 e132)))
(let ((e1573 (=> e1336 e94)))
(let ((e1574 (= e1361 e1102)))
(let ((e1575 (ite e1055 e953 e1573)))
(let ((e1576 (=> e1049 e1098)))
(let ((e1577 (= e1570 e108)))
(let ((e1578 (=> e1506 e1387)))
(let ((e1579 (ite e1534 e924 e1524)))
(let ((e1580 (xor e882 e848)))
(let ((e1581 (or e1460 e1553)))
(let ((e1582 (or e1080 e124)))
(let ((e1583 (not e1507)))
(let ((e1584 (xor e967 e1380)))
(let ((e1585 (not e1327)))
(let ((e1586 (not e824)))
(let ((e1587 (= e1153 e102)))
(let ((e1588 (or e1566 e1278)))
(let ((e1589 (= e770 e1485)))
(let ((e1590 (and e1582 e104)))
(let ((e1591 (and e1081 e1337)))
(let ((e1592 (or e1121 e831)))
(let ((e1593 (and e1480 e1315)))
(let ((e1594 (= e1318 e955)))
(let ((e1595 (xor e910 e865)))
(let ((e1596 (ite e1173 e835 e1328)))
(let ((e1597 (= e1238 e1439)))
(let ((e1598 (not e1018)))
(let ((e1599 (=> e1170 e1241)))
(let ((e1600 (=> e726 e945)))
(let ((e1601 (ite e1563 e1343 e730)))
(let ((e1602 (and e1571 e1494)))
(let ((e1603 (not e1198)))
(let ((e1604 (=> e1592 e1183)))
(let ((e1605 (ite e1392 e1100 e864)))
(let ((e1606 (not e804)))
(let ((e1607 (= e1549 e908)))
(let ((e1608 (=> e1346 e123)))
(let ((e1609 (ite e1555 e1522 e1280)))
(let ((e1610 (xor e1007 e1366)))
(let ((e1611 (or e1057 e833)))
(let ((e1612 (not e143)))
(let ((e1613 (or e817 e1261)))
(let ((e1614 (= e1356 e1122)))
(let ((e1615 (ite e885 e1313 e155)))
(let ((e1616 (= e1518 e1585)))
(let ((e1617 (not e959)))
(let ((e1618 (not e1569)))
(let ((e1619 (ite e1300 e1221 e855)))
(let ((e1620 (or e813 e1426)))
(let ((e1621 (xor e1083 e720)))
(let ((e1622 (= e1609 e678)))
(let ((e1623 (xor e809 e1033)))
(let ((e1624 (or e969 e1333)))
(let ((e1625 (not e728)))
(let ((e1626 (= e1521 e1246)))
(let ((e1627 (and e1375 e1594)))
(let ((e1628 (not e872)))
(let ((e1629 (ite e1251 e1312 e1073)))
(let ((e1630 (and e1231 e1601)))
(let ((e1631 (xor e927 e1520)))
(let ((e1632 (or e1176 e1209)))
(let ((e1633 (not e1132)))
(let ((e1634 (ite e1560 e1567 e1401)))
(let ((e1635 (or e1514 e1536)))
(let ((e1636 (= e1486 e1618)))
(let ((e1637 (not e1595)))
(let ((e1638 (and e1615 e1516)))
(let ((e1639 (not e1145)))
(let ((e1640 (= e1455 e1584)))
(let ((e1641 (xor e1477 e1351)))
(let ((e1642 (xor e812 e1071)))
(let ((e1643 (= e1363 e1620)))
(let ((e1644 (=> e1559 e1509)))
(let ((e1645 (not e1546)))
(let ((e1646 (=> e1557 e1636)))
(let ((e1647 (ite e1058 e1580 e1158)))
(let ((e1648 (or e1355 e965)))
(let ((e1649 (not e973)))
(let ((e1650 (xor e1537 e1243)))
(let ((e1651 (and e1616 e1583)))
(let ((e1652 (=> e1298 e1622)))
(let ((e1653 (ite e1416 e1489 e1437)))
(let ((e1654 (and e677 e1474)))
(let ((e1655 (= e791 e724)))
(let ((e1656 (ite e144 e838 e1334)))
(let ((e1657 (ite e710 e1324 e1041)))
(let ((e1658 (= e1385 e1465)))
(let ((e1659 (= e1531 e1562)))
(let ((e1660 (= e1138 e1451)))
(let ((e1661 (and e1166 e1623)))
(let ((e1662 (=> e1659 e1236)))
(let ((e1663 (xor e723 e1613)))
(let ((e1664 (and e1226 e1647)))
(let ((e1665 (=> e1382 e1414)))
(let ((e1666 (or e1115 e1247)))
(let ((e1667 (or e1214 e1148)))
(let ((e1668 (and e877 e673)))
(let ((e1669 (not e98)))
(let ((e1670 (ite e1604 e1556 e87)))
(let ((e1671 (xor e1554 e1655)))
(let ((e1672 (not e1184)))
(let ((e1673 (xor e740 e1408)))
(let ((e1674 (=> e1008 e702)))
(let ((e1675 (xor e901 e1564)))
(let ((e1676 (and e1427 e109)))
(let ((e1677 (or e1419 e1152)))
(let ((e1678 (not e89)))
(let ((e1679 (=> e1529 e1574)))
(let ((e1680 (= e1610 e1646)))
(let ((e1681 (or e1591 e1535)))
(let ((e1682 (ite e1386 e1189 e1547)))
(let ((e1683 (= e1369 e729)))
(let ((e1684 (= e954 e1670)))
(let ((e1685 (=> e1497 e830)))
(let ((e1686 (and e674 e1596)))
(let ((e1687 (or e920 e1259)))
(let ((e1688 (= e978 e1277)))
(let ((e1689 (=> e1482 e1126)))
(let ((e1690 (=> e716 e693)))
(let ((e1691 (=> e84 e1003)))
(let ((e1692 (and e1519 e1436)))
(let ((e1693 (xor e1614 e769)))
(let ((e1694 (ite e794 e1143 e1292)))
(let ((e1695 (= e1680 e1539)))
(let ((e1696 (and e1586 e1661)))
(let ((e1697 (= e1608 e815)))
(let ((e1698 (ite e1478 e1633 e1026)))
(let ((e1699 (= e1575 e1257)))
(let ((e1700 (=> e1639 e700)))
(let ((e1701 (and e847 e793)))
(let ((e1702 (=> e1329 e792)))
(let ((e1703 (xor e1512 e1513)))
(let ((e1704 (and e896 e1685)))
(let ((e1705 (=> e1461 e1672)))
(let ((e1706 (xor e814 e1541)))
(let ((e1707 (= e1649 e1544)))
(let ((e1708 (= e1456 e1438)))
(let ((e1709 (=> e1393 e1192)))
(let ((e1710 (not e1433)))
(let ((e1711 (ite e1638 e1446 e1568)))
(let ((e1712 (xor e1099 e1444)))
(let ((e1713 (=> e771 e1089)))
(let ((e1714 (ite e785 e749 e1697)))
(let ((e1715 (=> e999 e1654)))
(let ((e1716 (= e119 e103)))
(let ((e1717 (or e1244 e1660)))
(let ((e1718 (xor e1499 e1684)))
(let ((e1719 (= e1319 e854)))
(let ((e1720 (=> e1538 e1690)))
(let ((e1721 (and e1572 e1109)))
(let ((e1722 (not e1621)))
(let ((e1723 (=> e1686 e1423)))
(let ((e1724 (not e1704)))
(let ((e1725 (not e1069)))
(let ((e1726 (and e1725 e1405)))
(let ((e1727 (not e1467)))
(let ((e1728 (= e1432 e1619)))
(let ((e1729 (xor e691 e1603)))
(let ((e1730 (= e1407 e1406)))
(let ((e1731 (or e1528 e1308)))
(let ((e1732 (=> e1269 e1019)))
(let ((e1733 (not e1714)))
(let ((e1734 (=> e1698 e1667)))
(let ((e1735 (xor e711 e1542)))
(let ((e1736 (xor e975 e1708)))
(let ((e1737 (and e1307 e1449)))
(let ((e1738 (and e1644 e1036)))
(let ((e1739 (=> e1634 e891)))
(let ((e1740 (and e1674 e1632)))
(let ((e1741 (= e1711 e1683)))
(let ((e1742 (ite e1679 e948 e1459)))
(let ((e1743 (xor e1715 e1367)))
(let ((e1744 (ite e1294 e1428 e1175)))
(let ((e1745 (not e1493)))
(let ((e1746 (or e1612 e1666)))
(let ((e1747 (not e1734)))
(let ((e1748 (and e1060 e943)))
(let ((e1749 (or e1543 e675)))
(let ((e1750 (= e1665 e1086)))
(let ((e1751 (not e1396)))
(let ((e1752 (and e1631 e990)))
(let ((e1753 (not e1154)))
(let ((e1754 (ite e1735 e1629 e1114)))
(let ((e1755 (= e1218 e1712)))
(let ((e1756 (not e764)))
(let ((e1757 (xor e958 e1689)))
(let ((e1758 (xor e1510 e1743)))
(let ((e1759 (=> e1472 e1732)))
(let ((e1760 (=> e1703 e1335)))
(let ((e1761 (and e1600 e1692)))
(let ((e1762 (and e1085 e1284)))
(let ((e1763 (= e1187 e1653)))
(let ((e1764 (or e1700 e995)))
(let ((e1765 (xor e1733 e118)))
(let ((e1766 (xor e795 e705)))
(let ((e1767 (not e1174)))
(let ((e1768 (not e1287)))
(let ((e1769 (=> e1589 e1719)))
(let ((e1770 (or e1597 e1769)))
(let ((e1771 (and e768 e1718)))
(let ((e1772 (ite e1758 e1111 e1709)))
(let ((e1773 (=> e1129 e1755)))
(let ((e1774 (xor e1738 e697)))
(let ((e1775 (not e1624)))
(let ((e1776 (not e1517)))
(let ((e1777 (= e1643 e1701)))
(let ((e1778 (not e1751)))
(let ((e1779 (ite e1588 e1731 e1730)))
(let ((e1780 (= e1048 e1767)))
(let ((e1781 (not e1759)))
(let ((e1782 (ite e1691 e1671 e752)))
(let ((e1783 (=> e1776 e1001)))
(let ((e1784 (=> e1657 e1590)))
(let ((e1785 (not e1706)))
(let ((e1786 (and e1199 e980)))
(let ((e1787 (xor e1105 e1434)))
(let ((e1788 (=> e1004 e1695)))
(let ((e1789 (= e1716 e950)))
(let ((e1790 (not e1640)))
(let ((e1791 (=> e1515 e1128)))
(let ((e1792 (not e1663)))
(let ((e1793 (xor e1678 e1778)))
(let ((e1794 (=> e1652 e1762)))
(let ((e1795 (or e1720 e1651)))
(let ((e1796 (not e1729)))
(let ((e1797 (not e1710)))
(let ((e1798 (not e1256)))
(let ((e1799 (ite e1790 e1745 e1739)))
(let ((e1800 (=> e1274 e1635)))
(let ((e1801 (ite e1177 e1611 e1785)))
(let ((e1802 (or e1625 e1576)))
(let ((e1803 (not e1752)))
(let ((e1804 (or e1047 e974)))
(let ((e1805 (= e1617 e1457)))
(let ((e1806 (xor e1587 e963)))
(let ((e1807 (= e1773 e1146)))
(let ((e1808 (and e1723 e1388)))
(let ((e1809 (=> e1786 e1676)))
(let ((e1810 (ite e1471 e1593 e1800)))
(let ((e1811 (= e857 e734)))
(let ((e1812 (and e1770 e1420)))
(let ((e1813 (= e1119 e1201)))
(let ((e1814 (and e1727 e1696)))
(let ((e1815 (and e1551 e1495)))
(let ((e1816 (= e1390 e1797)))
(let ((e1817 (xor e1578 e1264)))
(let ((e1818 (=> e1737 e1015)))
(let ((e1819 (ite e991 e1721 e1803)))
(let ((e1820 (not e1801)))
(let ((e1821 (ite e1756 e1788 e1290)))
(let ((e1822 (not e1481)))
(let ((e1823 (= e1101 e112)))
(let ((e1824 (= e733 e1028)))
(let ((e1825 (not e1266)))
(let ((e1826 (not e1809)))
(let ((e1827 (and e1742 e1508)))
(let ((e1828 (=> e1641 e981)))
(let ((e1829 (not e1070)))
(let ((e1830 (= e1605 e1598)))
(let ((e1831 (not e1823)))
(let ((e1832 (=> e1668 e1532)))
(let ((e1833 (ite e1581 e1630 e1728)))
(let ((e1834 (or e1833 e1820)))
(let ((e1835 (ite e1810 e1650 e1658)))
(let ((e1836 (=> e1782 e126)))
(let ((e1837 (xor e1470 e1134)))
(let ((e1838 (= e1479 e1763)))
(let ((e1839 (or e1032 e1413)))
(let ((e1840 (not e1828)))
(let ((e1841 (= e1021 e1764)))
(let ((e1842 (=> e1645 e1774)))
(let ((e1843 (=> e1466 e1836)))
(let ((e1844 (ite e1834 e1818 e1789)))
(let ((e1845 (and e737 e1741)))
(let ((e1846 (ite e722 e732 e861)))
(let ((e1847 (=> e1835 e1687)))
(let ((e1848 (or e1163 e1552)))
(let ((e1849 (=> e1699 e1724)))
(let ((e1850 (xor e1765 e1843)))
(let ((e1851 (and e137 e1565)))
(let ((e1852 (or e1558 e1637)))
(let ((e1853 (not e1747)))
(let ((e1854 (and e1853 e1824)))
(let ((e1855 (not e1748)))
(let ((e1856 (=> e1491 e1545)))
(let ((e1857 (ite e1669 e1207 e922)))
(let ((e1858 (= e1791 e1847)))
(let ((e1859 (xor e1844 e1787)))
(let ((e1860 (or e1839 e1677)))
(let ((e1861 (=> e1642 e957)))
(let ((e1862 (not e1577)))
(let ((e1863 (and e1842 e1331)))
(let ((e1864 (not e1463)))
(let ((e1865 (not e1104)))
(let ((e1866 (and e1468 e1805)))
(let ((e1867 (xor e1832 e1648)))
(let ((e1868 (= e1761 e1796)))
(let ((e1869 (=> e1827 e1702)))
(let ((e1870 (not e100)))
(let ((e1871 (= e1814 e1855)))
(let ((e1872 (xor e1849 e1722)))
(let ((e1873 (ite e1826 e1656 e1760)))
(let ((e1874 (= e1795 e1673)))
(let ((e1875 (= e1548 e1011)))
(let ((e1876 (=> e1498 e1074)))
(let ((e1877 (not e1505)))
(let ((e1878 (= e843 e1693)))
(let ((e1879 (xor e1854 e940)))
(let ((e1880 (ite e1807 e1794 e1740)))
(let ((e1881 (=> e1435 e1430)))
(let ((e1882 (not e1607)))
(let ((e1883 (not e1746)))
(let ((e1884 (= e1817 e1871)))
(let ((e1885 (ite e1688 e1857 e1550)))
(let ((e1886 (xor e1862 e1303)))
(let ((e1887 (and e1869 e1874)))
(let ((e1888 (= e1780 e1825)))
(let ((e1889 (= e1707 e1322)))
(let ((e1890 (and e1579 e1865)))
(let ((e1891 (=> e1295 e1726)))
(let ((e1892 (=> e1815 e1845)))
(let ((e1893 (ite e1275 e1884 e1875)))
(let ((e1894 (or e1798 e1883)))
(let ((e1895 (xor e1090 e1863)))
(let ((e1896 (not e1775)))
(let ((e1897 (= e1626 e1879)))
(let ((e1898 (= e1530 e1749)))
(let ((e1899 (= e1804 e1736)))
(let ((e1900 (and e1029 e1851)))
(let ((e1901 (not e1784)))
(let ((e1902 (and e1792 e1858)))
(let ((e1903 (=> e1831 e1893)))
(let ((e1904 (ite e1878 e1878 e1829)))
(let ((e1905 (xor e1876 e1027)))
(let ((e1906 (xor e1856 e1808)))
(let ((e1907 (and e1744 e1561)))
(let ((e1908 (ite e1897 e1885 e1819)))
(let ((e1909 (= e1868 e1200)))
(let ((e1910 (xor e1873 e1793)))
(let ((e1911 (= e1487 e1771)))
(let ((e1912 (or e1866 e1894)))
(let ((e1913 (and e1664 e1848)))
(let ((e1914 (xor e1757 e1867)))
(let ((e1915 (xor e1859 e1602)))
(let ((e1916 (ite e1837 e1896 e1913)))
(let ((e1917 (ite e1091 e883 e1899)))
(let ((e1918 (xor e1675 e1880)))
(let ((e1919 (not e1888)))
(let ((e1920 (= e1830 e1864)))
(let ((e1921 (xor e1900 e1768)))
(let ((e1922 (ite e1281 e1802 e1889)))
(let ((e1923 (or e1399 e1918)))
(let ((e1924 (= e1799 e1895)))
(let ((e1925 (ite e1838 e1713 e1144)))
(let ((e1926 (=> e1750 e1772)))
(let ((e1927 (= e1821 e1841)))
(let ((e1928 (=> e1891 e888)))
(let ((e1929 (=> e1840 e1813)))
(let ((e1930 (xor e1816 e1781)))
(let ((e1931 (=> e1921 e1890)))
(let ((e1932 (or e1931 e1911)))
(let ((e1933 (=> e1492 e944)))
(let ((e1934 (xor e1920 e1606)))
(let ((e1935 (ite e1928 e1924 e1511)))
(let ((e1936 (and e1926 e1454)))
(let ((e1937 (=> e1850 e1916)))
(let ((e1938 (and e1753 e1901)))
(let ((e1939 (=> e1932 e1877)))
(let ((e1940 (or e1783 e1939)))
(let ((e1941 (= e1937 e1694)))
(let ((e1942 (ite e1907 e1806 e1919)))
(let ((e1943 (xor e1922 e1927)))
(let ((e1944 (not e1872)))
(let ((e1945 (or e1846 e1065)))
(let ((e1946 (not e1882)))
(let ((e1947 (xor e1917 e1504)))
(let ((e1948 (= e1095 e1944)))
(let ((e1949 (or e1910 e876)))
(let ((e1950 (not e1188)))
(let ((e1951 (=> e1909 e1929)))
(let ((e1952 (and e1886 e1940)))
(let ((e1953 (and e1925 e1915)))
(let ((e1954 (ite e1812 e1902 e1779)))
(let ((e1955 (or e1500 e1811)))
(let ((e1956 (=> e819 e1852)))
(let ((e1957 (or e1923 e1373)))
(let ((e1958 (=> e1951 e1705)))
(let ((e1959 (= e1955 e1754)))
(let ((e1960 (or e1662 e1371)))
(let ((e1961 (= e1046 e1766)))
(let ((e1962 (xor e866 e1953)))
(let ((e1963 (xor e1959 e1906)))
(let ((e1964 (and e1898 e1822)))
(let ((e1965 (=> e1904 e1887)))
(let ((e1966 (xor e1881 e1960)))
(let ((e1967 (or e1870 e1870)))
(let ((e1968 (=> e1967 e1934)))
(let ((e1969 (not e1938)))
(let ((e1970 (not e1627)))
(let ((e1971 (ite e1682 e822 e1958)))
(let ((e1972 (not e1942)))
(let ((e1973 (and e1948 e1946)))
(let ((e1974 (= e1860 e1945)))
(let ((e1975 (not e1936)))
(let ((e1976 (or e1961 e685)))
(let ((e1977 (and e1962 e1599)))
(let ((e1978 (ite e1956 e1935 e1943)))
(let ((e1979 (= e1975 e1970)))
(let ((e1980 (not e1045)))
(let ((e1981 (and e1950 e1905)))
(let ((e1982 (or e1903 e1892)))
(let ((e1983 (ite e1974 e1908 e1908)))
(let ((e1984 (and e1983 e1979)))
(let ((e1985 (or e1947 e1914)))
(let ((e1986 (ite e1980 e1933 e1980)))
(let ((e1987 (not e1777)))
(let ((e1988 (ite e1861 e1976 e1965)))
(let ((e1989 (ite e1717 e1988 e1949)))
(let ((e1990 (not e1952)))
(let ((e1991 (ite e1957 e1981 e1978)))
(let ((e1992 (= e1985 e1628)))
(let ((e1993 (or e1681 e1982)))
(let ((e1994 (xor e1954 e1989)))
(let ((e1995 (= e1994 e1964)))
(let ((e1996 (= e1930 e1963)))
(let ((e1997 (or e1987 e1984)))
(let ((e1998 (and e1977 e1966)))
(let ((e1999 (or e1986 e1912)))
(let ((e2000 (= e1996 e1969)))
(let ((e2001 (=> e1995 e1993)))
(let ((e2002 (= e1972 e110)))
(let ((e2003 (not e2002)))
(let ((e2004 (ite e1990 e1968 e1990)))
(let ((e2005 (ite e1998 e2001 e1998)))
(let ((e2006 (= e1992 e1999)))
(let ((e2007 (or e1941 e2004)))
(let ((e2008 (or e1971 e2003)))
(let ((e2009 (xor e2000 e2005)))
(let ((e2010 (= e1997 e2006)))
(let ((e2011 (= e2009 e2009)))
(let ((e2012 (not e2008)))
(let ((e2013 (= e1973 e810)))
(let ((e2014 (ite e2011 e2011 e1991)))
(let ((e2015 (not e2007)))
(let ((e2016 (and e2010 e2013)))
(let ((e2017 (ite e2012 e2014 e2016)))
(let ((e2018 (and e2015 e2015)))
(let ((e2019 (or e2017 e2018)))
e2019
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

(check-sat)

Incorrect result

Yices gives incorrect result on benchmark

yices2: sat
z3: unsat
cvc4: unsat

Issue with top-level equalities in pure QF_LRA

When the context only has simplex, i.e. context is created for "QF_LRA", there is no associated egraph.

Nevertheless, there is a way for an EQ_TERM to sneak into the ctx->top_eqs. In such a case yices fails, since assert_toplevel_formula and later calls assume egraph exists when handling EQ_TERM equalities.

This happens when

  • process_conditional_definitions adds something to ctx->aux_eqs (context.c)
  • process_aux_eqs then calls into try_substitution (context_simplifier.c)
  • try_substitution(t1, t2) can fail when both t1 and t2 are not free, and adds the EQ_TERM equality into ctx->top_eqs
  • CRASH

Wrong answer on some QF_UF problems

The symmetry-breaking code is incorrect. It sometimes adds symmetry-breaking clauses for problems that are not symmetric. This may cause incorrect answers (unsat instead of sat).

This was reported by Paulo Matos.

Two regression tests fail (MODE=debug)

Tests

regress/coverage/random/QF_UFBV/58e1afcf.smt2
regress/coverage/random/QF_UFBV/592d6ea8.smt2

fail with:

Assertion failed: (bv_interval_is_normalized(intv) && bvconst_le(intv->low, intv->high, n)),
function bvsrem_bounds_s, file solvers/bv/bvsolver.c, line 3361.

UF models in MCSAT

Currently there is no model created in MCSAT for uninterpreted functions.

Assertions failure in bitvectors

Yices fails an assertion

./build/x86_64-unknown-linux-gnu-devel/static_bin/yices_smt2 ~/fuzzsmt/votesmt-0.1/errors/QF_BV/yices2_to_check/error2.smt
yices_smt2: bvpoly_buffers.h:256: bvpoly_buffer_var: Assertion `i < b->nterms' failed.

Trace

Program received signal SIGABRT, Aborted.
0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
0000001 0x00007ffff77e5b8b in __GI_abort () at abort.c:91
0000002 0x00007ffff77db0ee in __assert_fail_base (fmt=<optimized out>, assertion=0x5bea3d "i < b->nterms", file=0x5bea2c "bvpoly_buffers.h",
    line=<optimized out>, function=<optimized out>) at assert.c:94
0000003 0x00007ffff77db192 in __GI___assert_fail (assertion=0x5bea3d "i < b->nterms", file=0x5bea2c "bvpoly_buffers.h", line=256,
    function=0x5bf8f0 "bvpoly_buffer_var") at assert.c:103
0000004 0x0000000000577cc9 in bvpoly_buffer_var (b=0x8990d8, i=0) at bvpoly_buffers.h:256
0000005 0x000000000057b20d in bvc_dag_of_buffer64 (dag=0x898f60, buffer=0x8990d8) at bvpoly_dag.c:1476
0000006 0x000000000057b7b2 in bvc_dag_poly_buffer (dag=0x898f60, b=0x899150, a=0x89cbd0) at bvpoly_dag.c:1702
0000007 0x000000000057620d in bv_compiler_pbuffer_to_dag (c=0x898f20, b=0x899150) at bvpoly_compiler.c:668
0000008 0x0000000000576358 in bv_compiler_map_var_to_dag (c=0x898f20, x=4) at bvpoly_compiler.c:701
0000009 0x000000000057775e in bv_compiler_process_queue (c=0x898f20) at bvpoly_compiler.c:1288
0000010 0x0000000000520162 in bv_solver_compile_polynomials (solver=0x874d80) at bvsolver.c:916
0000011 0x0000000000521f2c in bv_solver_bitblast (solver=0x874d80) at bvsolver.c:1698
0000012 0x000000000052c039 in bv_solver_start_search (solver=0x874d80) at bvsolver.c:6375
0000013 0x00000000004dc03b in start_search (s=0x874550) at smt_core.c:5539
0000014 0x000000000046d9ed in solve (core=0x874550, params=0x82f300) at context_solver.c:256
0000015 0x000000000046df27 in check_context (ctx=0x874040, params=0x82f300) at context_solver.c:408
0000016 0x000000000042c8a8 in check_delayed_assertions (g=0x82f920) at smt2_commands.c:2333
0000017 0x000000000042eb89 in smt2_check_sat () at smt2_commands.c:3671
0000018 0x000000000043586e in eval_smt2_check_sat (stack=0x82e960, f=0x882d50, n=0) at smt2_term_stack.c:789
0000019 0x000000000040f602 in tstack_eval (stack=0x82e960) at term_stack2.c:4974
0000020 0x0000000000431e35 in smt2_parse (parser=0x82e940, start=c0) at smt2_parser.c:252
0000021 0x0000000000432d94 in parse_smt2_command (parser=0x82e940) at smt2_parser.c:821
0000022 0x0000000000402c14 in main (argc=2, argv=0x7fffffffe9d8) at yices_smt2.c:325

Assertions failure in bitblasting

Running

./build/x86_64-unknown-linux-gnu-debug/bin/yices_smt2 ~/fuzzsmt/votesmt-0.1/errors/QF_AUFBV/yices2_to_check/error1.smt
yices_smt2: bvpoly_dag.c:1640: bvc_dag_remove_dependent: Assertion `k == m-1' failed.

Trace

#0 0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
0000001 0x00007ffff77e5b8b in __GI_abort () at abort.c:91
0000002 0x00007ffff77db0ee in __assert_fail_base (fmt=<optimized out>, assertion=0x5bc1f8 "k == m-1", file=0x5bbe17 "bvpoly_dag.c",
    line=<optimized out>, function=<optimized out>) at assert.c:94
0000003 0x00007ffff77db192 in __GI___assert_fail (assertion=0x5bc1f8 "k == m-1", file=0x5bbe17 "bvpoly_dag.c", line=1640,
    function=0x5bcac0 "bvc_dag_remove_dependent") at assert.c:103
0000004 0x000000000057982c in bvc_dag_remove_dependent (dag=0x87d070, n=3, i=4) at bvpoly_dag.c:1640
0000005 0x00000000005798eb in remove_sum_from_uses (dag=0x87d070, i=4, d=0x888b90) at bvpoly_dag.c:1663
0000006 0x0000000000579a26 in remove_from_uses (dag=0x87d070, i=4, d=0x888b90) at bvpoly_dag.c:1687
0000007 0x0000000000579b61 in bvc_dag_convert_to_leaf (dag=0x87d070, i=4, x=132) at bvpoly_dag.c:1732
0000008 0x0000000000574ec4 in bvc_process_elem_sum (c=0x87d030, i=4, d=0x888b90) at bvpoly_compiler.c:954
0000009 0x0000000000574fe0 in bvc_process_elem_node (c=0x87d030, i=4) at bvpoly_compiler.c:977
0000010 0x0000000000575556 in bv_compiler_convert_elem_nodes (c=0x87d030) at bvpoly_compiler.c:1190
0000011 0x000000000057588b in bv_compiler_process_queue (c=0x87d030) at bvpoly_compiler.c:1305
0000012 0x000000000051f872 in bv_solver_compile_polynomials (solver=0x866090) at bvsolver.c:916
0000013 0x000000000052163c in bv_solver_bitblast (solver=0x866090) at bvsolver.c:1698
0000014 0x000000000052b70b in bv_solver_start_search (solver=0x866090) at bvsolver.c:6366
0000015 0x0000000000478c81 in egraph_start_search (egraph=0x859030) at egraph.c:4395
0000016 0x00000000004dbc49 in start_search (s=0x853fc0) at smt_core.c:5535
0000017 0x000000000046d85a in solve (core=0x853fc0, params=0x82c340) at context_solver.c:256
0000018 0x000000000046dd94 in check_context (ctx=0x858630, params=0x82c340) at context_solver.c:408
0000019 0x000000000042cc96 in check_delayed_assertions (g=0x82c960) at smt2_commands.c:2449
0000020 0x000000000042ef44 in smt2_check_sat () at smt2_commands.c:3783
0000021 0x0000000000435b5e in eval_smt2_check_sat (stack=0x82b9a0, f=0x85b630, n=0) at smt2_term_stack.c:789
0000022 0x000000000040fa86 in tstack_eval (stack=0x82b9a0) at term_stack2.c:4974
0000023 0x0000000000432125 in smt2_parse (parser=0x82b980, start=c0) at smt2_parser.c:252
0000024 0x0000000000433084 in parse_smt2_command (parser=0x82b980) at smt2_parser.c:821
0000025 0x0000000000402e24 in main (argc=2, argv=0x7fffffffe9d8) at yices_smt2.c:323

Wrong answer in QF_BV

Found with fuzzer. Both z3 and cvc4 return unsat while yices returns sat.

(set-info :source |fuzzsmt|)
(set-info :smt-lib-version 2.0)
(set-info :category "random")
(set-info :status unknown)
(set-logic QF_BV)
(declare-fun v0 () (_ BitVec 113))
(declare-fun v1 () (_ BitVec 81))
(declare-fun v2 () (_ BitVec 43))
(assert (let ((e3(_ bv394260151736213788780461 79)))
(let ((e4(_ bv10032561801202951607202934310 95)))
(let ((e5 (bvmul v1 v1)))
(let ((e6 (bvand v2 v2)))
(let ((e7 ((_ zero_extend 49) v2)))
(let ((e8 (ite (= e5 ((_ sign_extend 2) e3)) (_ bv1 1) (_ bv0 1))))
(let ((e9 (ite (bvuge ((_ sign_extend 38) v2) e5) (_ bv1 1) (_ bv0 1))))
(let ((e10 (bvsrem ((_ zero_extend 42) e9) e6)))
(let ((e11 (ite (bvult ((_ zero_extend 42) e9) v2) (_ bv1 1) (_ bv0 1))))
(let ((e12 (ite (bvsge ((_ sign_extend 36) v2) e3) (_ bv1 1) (_ bv0 1))))
(let ((e13 (bvashr e8 e9)))
(let ((e14 ((_ rotate_right 0) e13)))
(let ((e15 ((_ zero_extend 20) e5)))
(let ((e16 (concat e11 e11)))
(let ((e17 (ite (= e3 ((_ zero_extend 36) e6)) (_ bv1 1) (_ bv0 1))))
(let ((e18 (bvnot e10)))
(let ((e19 (bvudiv ((_ sign_extend 42) e11) e6)))
(let ((e20 ((_ rotate_right 73) e7)))
(let ((e21 ((_ rotate_left 47) e20)))
(let ((e22 ((_ rotate_right 0) e14)))
(let ((e23 (bvcomp e7 ((_ sign_extend 90) e16))))
(let ((e24 (ite (bvsle ((_ zero_extend 91) e14) e7) (_ bv1 1) (_ bv0 1))))
(let ((e25 (bvmul e10 ((_ sign_extend 42) e24))))
(let ((e26 (ite (= (_ bv1 1) ((_ extract 75 75) e20)) e17 e24)))
(let ((e27 (bvashr ((_ zero_extend 91) e17) e7)))
(let ((e28 (concat e13 e17)))
(let ((e29 (bvcomp v1 ((_ zero_extend 38) e18))))
(let ((e30 (bvneg e19)))
(let ((e31 (bvxnor ((_ sign_extend 78) e22) e3)))
(let ((e32 (bvudiv ((_ zero_extend 42) e8) e30)))
(let ((e33 (bvashr e10 ((_ sign_extend 42) e26))))
(let ((e34 (bvxor ((_ zero_extend 3) e7) e4)))
(let ((e35 (bvashr ((_ sign_extend 49) v2) e27)))
(let ((e36 (bvashr ((_ sign_extend 11) e5) e35)))
(let ((e37 ((_ rotate_right 65) e4)))
(let ((e38 (bvnand e10 ((_ zero_extend 42) e8))))
(let ((e39 (bvmul e6 e33)))
(let ((e40 (bvxor ((_ sign_extend 91) e9) e27)))
(let ((e41 (ite (distinct ((_ sign_extend 93) e28) e37) (_ bv1 1) (_ bv0 1))))
(let ((e42 ((_ zero_extend 62) e24)))
(let ((e43 (ite (bvult e21 ((_ sign_extend 91) e8)) (_ bv1 1) (_ bv0 1))))
(let ((e44 (bvudiv e12 e8)))
(let ((e45 (ite (bvuge ((_ sign_extend 49) e25) e7) (_ bv1 1) (_ bv0 1))))
(let ((e46 (bvneg e28)))
(let ((e47 (bvcomp e31 ((_ sign_extend 78) e41))))
(let ((e48 ((_ rotate_right 0) e13)))
(let ((e49 (ite (bvugt ((_ zero_extend 16) e42) e31) (_ bv1 1) (_ bv0 1))))
(let ((e50 (bvxor e41 e41)))
(let ((e51 (bvsub v2 ((_ zero_extend 41) e28))))
(let ((e52 ((_ zero_extend 19) e15)))
(let ((e53 (bvnand ((_ sign_extend 49) e39) e36)))
(let ((e54 (bvneg e34)))
(let ((e55 (bvashr ((_ zero_extend 49) e18) e20)))
(let ((e56 (bvxnor ((_ zero_extend 91) e44) e36)))
(let ((e57 (ite (= (_ bv1 1) ((_ extract 0 0) e49)) e17 e26)))
(let ((e58 (bvand e42 ((_ zero_extend 20) v2))))
(let ((e59 (ite (bvsge ((_ sign_extend 1) e45) e46) (_ bv1 1) (_ bv0 1))))
(let ((e60 ((_ repeat 35) e49)))
(let ((e61 (bvmul e6 ((_ sign_extend 42) e44))))
(let ((e62 (bvashr e57 e43)))
(let ((e63 ((_ extract 69 28) e27)))
(let ((e64 (bvsdiv ((_ sign_extend 78) e8) e3)))
(let ((e65 (ite (bvugt e44 e17) (_ bv1 1) (_ bv0 1))))
(let ((e66 (ite (bvsle ((_ sign_extend 112) e57) v0) (_ bv1 1) (_ bv0 1))))
(let ((e67 (bvsle e21 ((_ zero_extend 90) e16))))
(let ((e68 (= e45 e9)))
(let ((e69 (bvugt ((_ sign_extend 1) e65) e46)))
(let ((e70 (bvult e27 ((_ sign_extend 57) e60))))
(let ((e71 (bvsge e4 ((_ sign_extend 93) e16))))
(let ((e72 (bvslt e37 ((_ sign_extend 3) e40))))
(let ((e73 (bvsge ((_ sign_extend 78) e22) e64)))
(let ((e74 (bvsgt e47 e44)))
(let ((e75 (distinct e40 ((_ zero_extend 91) e17))))
(let ((e76 (bvult ((_ sign_extend 42) e50) e6)))
(let ((e77 (distinct e37 ((_ zero_extend 3) e53))))
(let ((e78 (bvsle e6 ((_ zero_extend 42) e49))))
(let ((e79 (bvsge e39 ((_ zero_extend 42) e57))))
(let ((e80 (bvuge e37 e54)))
(let ((e81 (bvslt ((_ sign_extend 3) e21) e54)))
(let ((e82 (bvult ((_ sign_extend 42) e13) e32)))
(let ((e83 (bvult e27 ((_ sign_extend 91) e14))))
(let ((e84 (bvuge v2 ((_ zero_extend 42) e24))))
(let ((e85 (bvslt ((_ zero_extend 42) e24) e39)))
(let ((e86 (bvsle ((_ zero_extend 100) e44) e15)))
(let ((e87 (bvsge ((_ zero_extend 42) e45) e38)))
(let ((e88 (distinct e8 e43)))
(let ((e89 (= e64 ((_ zero_extend 36) e6))))
(let ((e90 (bvsge ((_ sign_extend 20) e51) e42)))
(let ((e91 (bvuge e62 e26)))
(let ((e92 (bvult e6 ((_ zero_extend 42) e66))))
(let ((e93 (bvult e54 ((_ zero_extend 94) e49))))
(let ((e94 (bvsle ((_ zero_extend 3) e53) e54)))
(let ((e95 (bvslt ((_ zero_extend 42) e22) e38)))
(let ((e96 (distinct e30 e61)))
(let ((e97 (bvugt e42 ((_ zero_extend 62) e41))))
(let ((e98 (distinct e5 ((_ zero_extend 80) e11))))
(let ((e99 (bvsgt e63 ((_ zero_extend 41) e50))))
(let ((e100 (bvslt ((_ zero_extend 41) e48) e63)))
(let ((e101 (distinct ((_ zero_extend 49) e18) e27)))
(let ((e102 (bvuge e7 ((_ zero_extend 90) e46))))
(let ((e103 (bvuge ((_ sign_extend 33) e46) e60)))
(let ((e104 (distinct ((_ sign_extend 91) e14) e56)))
(let ((e105 (bvule e53 ((_ sign_extend 49) e30))))
(let ((e106 (distinct ((_ sign_extend 42) e11) e39)))
(let ((e107 (distinct e43 e9)))
(let ((e108 (bvuge e46 ((_ zero_extend 1) e62))))
(let ((e109 (bvuge ((_ zero_extend 20) v1) e15)))
(let ((e110 (bvult e31 ((_ zero_extend 36) e25))))
(let ((e111 (bvuge e36 ((_ sign_extend 49) e39))))
(let ((e112 (bvult e6 e39)))
(let ((e113 (bvsle e39 ((_ zero_extend 42) e50))))
(let ((e114 (bvslt v1 ((_ zero_extend 2) e3))))
(let ((e115 (bvslt e9 e29)))
(let ((e116 (bvugt e37 ((_ zero_extend 3) e53))))
(let ((e117 (bvsle e43 e9)))
(let ((e118 (bvult ((_ sign_extend 49) e18) e21)))
(let ((e119 (= e47 e41)))
(let ((e120 (bvslt e36 ((_ sign_extend 91) e8))))
(let ((e121 (distinct e27 ((_ sign_extend 11) e5))))
(let ((e122 (bvuge e5 ((_ sign_extend 80) e41))))
(let ((e123 (bvsle e55 ((_ sign_extend 49) e33))))
(let ((e124 (bvsge e3 ((_ sign_extend 36) v2))))
(let ((e125 (bvugt e39 ((_ sign_extend 42) e65))))
(let ((e126 (bvsle ((_ sign_extend 91) e59) e53)))
(let ((e127 (bvuge ((_ zero_extend 91) e65) e35)))
(let ((e128 (bvsgt v1 ((_ zero_extend 80) e26))))
(let ((e129 (bvugt e20 ((_ zero_extend 91) e26))))
(let ((e130 (bvsgt e45 e50)))
(let ((e131 (bvsgt e52 ((_ sign_extend 119) e17))))
(let ((e132 (bvslt e4 ((_ sign_extend 52) e33))))
(let ((e133 (= ((_ zero_extend 91) e11) e35)))
(let ((e134 (bvsle e37 ((_ sign_extend 94) e12))))
(let ((e135 (bvslt e49 e66)))
(let ((e136 (bvugt ((_ sign_extend 91) e48) e20)))
(let ((e137 (bvugt ((_ sign_extend 41) e46) e38)))
(let ((e138 (distinct e40 ((_ sign_extend 11) v1))))
(let ((e139 (bvsle e37 ((_ sign_extend 94) e9))))
(let ((e140 (bvsge e64 ((_ zero_extend 78) e47))))
(let ((e141 (distinct e7 ((_ zero_extend 91) e49))))
(let ((e142 (distinct e45 e44)))
(let ((e143 (bvsge e57 e29)))
(let ((e144 (bvult e19 e38)))
(let ((e145 (bvugt e17 e23)))
(let ((e146 (bvule e63 ((_ sign_extend 41) e9))))
(let ((e147 (= e44 e43)))
(let ((e148 (bvuge ((_ zero_extend 77) e32) e52)))
(let ((e149 (bvsle ((_ sign_extend 1) e48) e46)))
(let ((e150 (bvugt ((_ sign_extend 94) e11) e54)))
(let ((e151 (distinct e43 e22)))
(let ((e152 (bvugt e31 ((_ zero_extend 78) e8))))
(let ((e153 (bvsle e40 ((_ sign_extend 91) e22))))
(let ((e154 (bvsgt ((_ sign_extend 49) e18) e27)))
(let ((e155 (bvsgt e34 e4)))
(let ((e156 (bvult ((_ zero_extend 11) e5) e7)))
(let ((e157 (bvsge ((_ sign_extend 41) e46) e32)))
(let ((e158 (bvuge e44 e43)))
(let ((e159 (bvule ((_ zero_extend 49) e18) e20)))
(let ((e160 (bvuge ((_ sign_extend 42) e22) e61)))
(let ((e161 (bvslt ((_ sign_extend 36) e30) e31)))
(let ((e162 (bvugt ((_ sign_extend 42) e17) e6)))
(let ((e163 (bvuge e23 e66)))
(let ((e164 (bvsgt ((_ sign_extend 1) e50) e28)))
(let ((e165 (bvule e27 ((_ zero_extend 91) e17))))
(let ((e166 (bvugt ((_ zero_extend 80) e8) v1)))
(let ((e167 (bvsgt e62 e24)))
(let ((e168 (bvsge ((_ sign_extend 94) e59) e37)))
(let ((e169 (distinct e26 e43)))
(let ((e170 (bvule e30 e39)))
(let ((e171 (bvsle e30 v2)))
(let ((e172 (bvuge ((_ zero_extend 52) e25) e34)))
(let ((e173 (bvslt ((_ zero_extend 49) e30) e7)))
(let ((e174 (= e60 ((_ zero_extend 34) e23))))
(let ((e175 (bvslt ((_ sign_extend 42) e12) e10)))
(let ((e176 (bvsge ((_ sign_extend 42) e29) e19)))
(let ((e177 (distinct e17 e45)))
(let ((e178 (bvuge e34 ((_ sign_extend 94) e13))))
(let ((e179 (bvsge e5 ((_ zero_extend 38) e38))))
(let ((e180 (bvult ((_ sign_extend 42) e57) e38)))
(let ((e181 (bvuge e28 ((_ zero_extend 1) e14))))
(let ((e182 (distinct ((_ sign_extend 49) e18) e20)))
(let ((e183 (bvsgt ((_ sign_extend 18) e37) v0)))
(let ((e184 (bvsgt e18 ((_ zero_extend 42) e22))))
(let ((e185 (bvult e22 e29)))
(let ((e186 (bvule ((_ zero_extend 42) e24) e25)))
(let ((e187 (bvslt ((_ sign_extend 58) e39) e15)))
(let ((e188 (bvult e36 ((_ zero_extend 49) e61))))
(let ((e189 (= e42 ((_ zero_extend 62) e12))))
(let ((e190 (bvsle ((_ zero_extend 49) e51) e53)))
(let ((e191 (bvslt e40 ((_ zero_extend 49) e38))))
(let ((e192 (= ((_ zero_extend 52) e39) e34)))
(let ((e193 (= ((_ sign_extend 91) e65) e20)))
(let ((e194 (bvult ((_ sign_extend 62) e17) e42)))
(let ((e195 (bvule ((_ zero_extend 91) e22) e40)))
(let ((e196 (bvsge e25 ((_ zero_extend 42) e9))))
(let ((e197 (bvult ((_ zero_extend 50) e63) e36)))
(let ((e198 (bvugt e38 ((_ sign_extend 42) e11))))
(let ((e199 (bvsgt e17 e12)))
(let ((e200 (bvsle ((_ sign_extend 41) e16) e61)))
(let ((e201 (distinct ((_ sign_extend 11) v1) e7)))
(let ((e202 (bvsle e52 ((_ sign_extend 119) e41))))
(let ((e203 (bvule e29 e44)))
(let ((e204 (bvugt ((_ sign_extend 94) e45) e4)))
(let ((e205 (= ((_ sign_extend 91) e44) e35)))
(let ((e206 (bvugt ((_ zero_extend 94) e57) e37)))
(let ((e207 (= ((_ zero_extend 42) e45) e33)))
(let ((e208 (bvult e40 ((_ sign_extend 29) e42))))
(let ((e209 (bvuge ((_ sign_extend 91) e24) e55)))
(let ((e210 (bvsge ((_ sign_extend 90) e16) e7)))
(let ((e211 (distinct e51 e33)))
(let ((e212 (bvult e51 ((_ zero_extend 41) e28))))
(let ((e213 (bvuge ((_ zero_extend 91) e47) e21)))
(let ((e214 (bvsgt ((_ zero_extend 91) e26) e53)))
(let ((e215 (bvule e24 e47)))
(let ((e216 (bvsge e19 e61)))
(let ((e217 (bvsgt ((_ zero_extend 60) e60) e34)))
(let ((e218 (bvuge ((_ sign_extend 62) e43) e58)))
(let ((e219 (=> e152 e205)))
(let ((e220 (xor e94 e78)))
(let ((e221 (or e157 e98)))
(let ((e222 (=> e219 e132)))
(let ((e223 (=> e69 e124)))
(let ((e224 (ite e71 e82 e186)))
(let ((e225 (= e122 e176)))
(let ((e226 (xor e88 e196)))
(let ((e227 (and e115 e107)))
(let ((e228 (= e85 e194)))
(let ((e229 (or e90 e141)))
(let ((e230 (and e135 e201)))
(let ((e231 (not e163)))
(let ((e232 (=> e146 e179)))
(let ((e233 (= e76 e119)))
(let ((e234 (= e222 e129)))
(let ((e235 (=> e73 e174)))
(let ((e236 (ite e198 e143 e103)))
(let ((e237 (or e153 e153)))
(let ((e238 (ite e108 e215 e70)))
(let ((e239 (= e165 e161)))
(let ((e240 (or e139 e75)))
(let ((e241 (not e87)))
(let ((e242 (=> e100 e190)))
(let ((e243 (xor e86 e168)))
(let ((e244 (or e145 e72)))
(let ((e245 (not e218)))
(let ((e246 (ite e80 e159 e191)))
(let ((e247 (xor e187 e246)))
(let ((e248 (and e204 e223)))
(let ((e249 (not e97)))
(let ((e250 (and e144 e154)))
(let ((e251 (ite e149 e169 e126)))
(let ((e252 (or e77 e209)))
(let ((e253 (= e96 e208)))
(let ((e254 (xor e197 e105)))
(let ((e255 (=> e160 e99)))
(let ((e256 (ite e113 e101 e68)))
(let ((e257 (ite e158 e171 e89)))
(let ((e258 (xor e74 e167)))
(let ((e259 (ite e203 e239 e106)))
(let ((e260 (= e102 e123)))
(let ((e261 (ite e156 e93 e211)))
(let ((e262 (and e253 e131)))
(let ((e263 (ite e185 e256 e225)))
(let ((e264 (or e95 e180)))
(let ((e265 (or e81 e258)))
(let ((e266 (or e247 e216)))
(let ((e267 (not e148)))
(let ((e268 (and e233 e259)))
(let ((e269 (not e213)))
(let ((e270 (not e173)))
(let ((e271 (= e234 e255)))
(let ((e272 (and e114 e137)))
(let ((e273 (= e244 e151)))
(let ((e274 (or e264 e224)))
(let ((e275 (ite e199 e232 e243)))
(let ((e276 (ite e272 e111 e118)))
(let ((e277 (ite e236 e242 e260)))
(let ((e278 (ite e212 e138 e249)))
(let ((e279 (not e240)))
(let ((e280 (or e121 e266)))
(let ((e281 (or e227 e217)))
(let ((e282 (xor e237 e281)))
(let ((e283 (= e270 e110)))
(let ((e284 (ite e134 e252 e279)))
(let ((e285 (=> e263 e170)))
(let ((e286 (ite e155 e200 e117)))
(let ((e287 (or e91 e245)))
(let ((e288 (or e178 e192)))
(let ((e289 (not e210)))
(let ((e290 (not e226)))
(let ((e291 (and e250 e238)))
(let ((e292 (= e67 e268)))
(let ((e293 (=> e288 e221)))
(let ((e294 (or e275 e116)))
(let ((e295 (and e267 e274)))
(let ((e296 (xor e84 e177)))
(let ((e297 (=> e283 e282)))
(let ((e298 (ite e289 e83 e92)))
(let ((e299 (not e248)))
(let ((e300 (and e207 e291)))
(let ((e301 (=> e230 e172)))
(let ((e302 (= e301 e261)))
(let ((e303 (or e235 e271)))
(let ((e304 (not e109)))
(let ((e305 (= e290 e184)))
(let ((e306 (ite e305 e181 e298)))
(let ((e307 (not e112)))
(let ((e308 (=> e277 e303)))
(let ((e309 (= e294 e307)))
(let ((e310 (=> e308 e276)))
(let ((e311 (ite e140 e125 e265)))
(let ((e312 (xor e300 e120)))
(let ((e313 (ite e296 e231 e299)))
(let ((e314 (= e128 e229)))
(let ((e315 (ite e175 e206 e306)))
(let ((e316 (ite e269 e311 e220)))
(let ((e317 (not e297)))
(let ((e318 (not e202)))
(let ((e319 (= e286 e285)))
(let ((e320 (not e302)))
(let ((e321 (= e262 e278)))
(let ((e322 (= e320 e315)))
(let ((e323 (= e104 e280)))
(let ((e324 (= e136 e317)))
(let ((e325 (xor e241 e130)))
(let ((e326 (or e313 e310)))
(let ((e327 (=> e322 e322)))
(let ((e328 (xor e327 e314)))
(let ((e329 (or e312 e321)))
(let ((e330 (=> e292 e195)))
(let ((e331 (not e162)))
(let ((e332 (=> e142 e316)))
(let ((e333 (ite e323 e257 e324)))
(let ((e334 (=> e319 e333)))
(let ((e335 (xor e228 e287)))
(let ((e336 (not e127)))
(let ((e337 (ite e214 e328 e304)))
(let ((e338 (or e337 e133)))
(let ((e339 (xor e273 e331)))
(let ((e340 (or e193 e189)))
(let ((e341 (ite e183 e318 e334)))
(let ((e342 (ite e329 e329 e188)))
(let ((e343 (not e251)))
(let ((e344 (ite e147 e182 e293)))
(let ((e345 (not e340)))
(let ((e346 (xor e345 e254)))
(let ((e347 (or e284 e79)))
(let ((e348 (ite e347 e343 e338)))
(let ((e349 (= e309 e166)))
(let ((e350 (ite e336 e348 e348)))
(let ((e351 (or e349 e339)))
(let ((e352 (not e346)))
(let ((e353 (or e344 e344)))
(let ((e354 (ite e342 e342 e335)))
(let ((e355 (=> e325 e332)))
(let ((e356 (or e353 e326)))
(let ((e357 (=> e356 e341)))
(let ((e358 (= e351 e350)))
(let ((e359 (=> e352 e352)))
(let ((e360 (ite e355 e359 e357)))
(let ((e361 (or e164 e354)))
(let ((e362 (= e360 e150)))
(let ((e363 (=> e330 e361)))
(let ((e364 (xor e358 e362)))
(let ((e365 (ite e295 e295 e364)))
(let ((e366 (=> e365 e365)))
(let ((e367 (and e366 e366)))
(let ((e368 (=> e363 e363)))
(let ((e369 (= e367 e367)))
(let ((e370 (and e369 e369)))
(let ((e371 (=> e370 e368)))
(let ((e372 (and e371 (not (= e8 (_ bv0 1))))))
(let ((e373 (and e372 (not (= e6 (_ bv0 43))))))
(let ((e374 (and e373 (not (= e6 (bvnot (_ bv0 43)))))))
(let ((e375 (and e374 (not (= e30 (_ bv0 43))))))
(let ((e376 (and e375 (not (= e3 (_ bv0 79))))))
(let ((e377 (and e376 (not (= e3 (bvnot (_ bv0 79)))))))
e377
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

(check-sat)

Memory corruption with big bit-vector constants (+wrong answer)

As in the competition, memory gets corrupted on the benchmark

valgrind ./build/x86_64-unknown-linux-gnu-debug/bin/yices_smt2 ~/Downloads/scrambled.smt2

==6218== Invalid write of size 4
==6218== at 0x44DB56: bvconst_set_p0 (bv_constants.c:556)
==6218== by 0x44DD70: bvconst_set_extend (bv_constants.c:614)
==6218== by 0x56DA19: bv_aux_addmul_u (bv_intervals.c:79)
==6218== by 0x56F15F: bv_interval_addmul_u (bv_intervals.c:565)
==6218== by 0x5255C6: bvpoly_bounds_u (bvsolver.c:3187)
==6218== by 0x5262DC: bvvar_bounds_u (bvsolver.c:3478)
==6218== by 0x526936: check_bvuge_core (bvsolver.c:3621)
==6218== by 0x526B06: check_bvuge (bvsolver.c:3666)
==6218== by 0x52A9AC: bv_solver_create_ge_atom (bvsolver.c:5421)
==6218== by 0x45E1D9: map_bvge_to_literal (context.c:1515)
==6218== by 0x45FFA3: internalize_to_literal (context.c:2202)
==6218== by 0x45C729: map_bvarray_to_bv (context.c:766)

Timeout per command in interactive mode

User request from Ultimate Atomizer: a timeout option that works in incremental mode and limits the time per command. After the timeout the solver should return unknown, so that assertions can be removed or added, and then further checks can be done.

Incorrect error message for unimplemented functions

Reported by Andrew Gacek: yices-2.2.2 gives an incorrect message for specs that use div or mod (or any other SMT2 construct not yet supported).

(set-logic QF_UFLIA)
(define-fun T () Int (div 30 10)) ; reported as 'abs' not implemented
(define-fun T () Int (mod 30 10)) ; reported as 'to_real' not implemented

Crash on OSX El Capitan

From Joe: "Crashes on Yices 2.4.2 with "illegal hardware instruction” on OSX El Capitan. Yices 2.4.1 correctly returns unsat."

Runs on Linux no problem.

;; ./test.m:3:19
(define y::(bitvector 32))
(define x!0::(bitvector 64) (bv-concat (if (= (bv-extract 31 31 y) (mk-bv 1 1)) (mk-bv 32 4294967295) (mk-bv 32 0)) y))
(define x!1::(bitvector 64) (bv-mul x!0 x!0))
(define x!2::(bitvector 32) (bv-extract 31 0 x!1))
(define x!3::bool (bv-slt x!2 (mk-bv 32 0)))
(define x!4::bool (not x!3))
(define x!5::(bitvector 64) (bv-lshr x!1 (mk-bv 64 32)))
(define x!6::(bitvector 32) (bv-extract 31 0 x!5))
(define x!7::bool (= (mk-bv 32 0) x!6))
(define x!8::bool (and x!4 x!7))
(define x!9::bool (not x!8))
(define x!10::bool (= (mk-bv 32 4294967295) x!6))
(define x!11::bool (and x!3 x!10))
(define x!12::bool (not x!11))
(define x!13::bool (and x!9 x!12))
(define x!14::bool (bv-slt x!6 (mk-bv 32 0)))
(define x!15::(bitvector 32) (if x!14 (mk-bv 32 2147483648) (mk-bv 32 2147483647)))
(define x!16::(bitvector 32) (if x!13 x!15 x!2))
(define x!17::bool (= (mk-bv 32 7) x!16))
;; ./test.m:3:23
(assert x!17)
;; ./test.m:3:11
(define x::real)
(define x!18::bool (<= x 0))
(define x!19::bool (<= 0 x))
(define x!20::bool (and x!18 x!19))
(define x!21::bool (not x!20))
(assert x!21)
(check)
(show-model)

Eval with algebraic numbers

From Joe:

I’m trying to get mss to work with yices’ non-linear mode. One thing I noticed was that "(show-model)” prints out a decimal approximation of numbers while “(eval exp)” shows the roots, e.g.,

(eval y)
<2*x^2 + (-1), (1/2, 3/4)>
(show-model)
...
(= y 0.707107)

Is there an option in Yices to tell eval to print out a decimal approximation as well? Alternatively, do you have a description of the legal output form for eval, and a recommended root finding algorithm to use?

Assertion fails in incremental mode

The egraph explanation data structure gets in a bad state, when running yices on the incremental benchmark QF_AUFLIA/safari/german_buggy.smt2.

Assertion failure in eg/bv interaction

Running

./build/x86_64-unknown-linux-gnu-debug/bin/yices_smt2 ~/fuzzsmt/votesmt-0.1/errors/QF_AUFBV/yices2_to_check/error2.smt
yices_smt2: bvsolver.c:2887: simplify_eq: Assertion `x != y && mtbl_is_root(&solver->mtbl, x) && mtbl_is_root(&solver->mtbl, y)' failed.

Trace

Program received signal SIGABRT, Aborted.
0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
0000001 0x00007ffff77e5b8b in __GI_abort () at abort.c:91
0000002 0x00007ffff77db0ee in __assert_fail_base (fmt=<optimized out>,
    assertion=0x5af078 "x != y && mtbl_is_root(&solver->mtbl, x) && mtbl_is_root(&solver->mtbl, y)", file=0x5ae581 "bvsolver.c",
    line=<optimized out>, function=<optimized out>) at assert.c:94
0000003 0x00007ffff77db192 in __GI___assert_fail (assertion=0x5af078 "x != y && mtbl_is_root(&solver->mtbl, x) && mtbl_is_root(&solver->mtbl, y)",
    file=0x5ae581 "bvsolver.c", line=2887, function=0x5b0cdb "simplify_eq") at assert.c:103
0000004 0x0000000000524129 in simplify_eq (solver=0x859d60, vx=0x7fffffffdbf0, vy=0x7fffffffdbf4) at bvsolver.c:2887
0000005 0x000000000052b222 in bv_solver_bvequiv_conflict (solver=0x859d60, x1=1, x2=6, id=6) at bvsolver.c:6212
0000006 0x000000000052b5c5 in bv_solver_process_egraph_assertions (solver=0x859d60) at bvsolver.c:6294
0000007 0x000000000052b79f in bv_solver_propagate (solver=0x859d60) at bvsolver.c:6381
0000008 0x000000000047a522 in egraph_propagate (egraph=0x853f40) at egraph.c:5115
0000009 0x00000000004d6201 in theory_propagation (s=0x853920) at smt_core.c:2697
0000010 0x00000000004d627e in smt_propagation (s=0x853920) at smt_core.c:2725
0000011 0x00000000004dbd95 in smt_process (s=0x853920) at smt_core.c:5592
0000012 0x00000000004dbeb5 in smt_final_check (s=0x853920) at smt_core.c:5628
0000013 0x000000000046d44b in search (core=0x853920, conflict_bound=100, reduce_threshold=0x7fffffffdde4, r_factor=1.05) at context_solver.c:111
0000014 0x000000000046d8ec in solve (core=0x853920, params=0x82d340) at context_solver.c:264
0000015 0x000000000046ddb4 in check_context (ctx=0x853420, params=0x82d340) at context_solver.c:408
0000016 0x000000000042ccb6 in check_delayed_assertions (g=0x82d960) at smt2_commands.c:2452
0000017 0x000000000042ef64 in smt2_check_sat () at smt2_commands.c:3786
0000018 0x0000000000435b7e in eval_smt2_check_sat (stack=0x82c9a0, f=0x847bd0, n=0) at smt2_term_stack.c:789
0000019 0x000000000040fa86 in tstack_eval (stack=0x82c9a0) at term_stack2.c:4974
0000020 0x0000000000432145 in smt2_parse (parser=0x82c980, start=c0) at smt2_parser.c:252
0000021 0x00000000004330a4 in parse_smt2_command (parser=0x82c980) at smt2_parser.c:821
0000022 0x0000000000402e24 in main (argc=2, argv=0x7fffffffe098) at yices_smt2.c:323

Assertion failure in bitblasting (bv_compiler_mk_bvmul)

Yices fails an assert when run on the input

./solvers/yices2/build/x86_64-unknown-linux-gnu-devel/bin/yices_smt2 errors/QF_UFBV/yices2_to_check/error1.smt
yices_smt2: solvers/bv/bvpoly_compiler.c:318: bv_compiler_mk_bvmul: Assertion `find_bvmul(c->vtbl, x, y) == -1' failed.

Trace

Program received signal SIGABRT, Aborted.
0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff77e2425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
0000001 0x00007ffff77e5b8b in __GI_abort () at abort.c:91
0000002 0x00007ffff77db0ee in __assert_fail_base (fmt=<optimized out>, assertion=0x587fe8 "find_bvmul(c->vtbl, x, y) == -1",
    file=0x587e90 "solvers/bv/bvpoly_compiler.c", line=<optimized out>, function=<optimized out>) at assert.c:94
0000003 0x00007ffff77db192 in __GI___assert_fail (assertion=0x587fe8 "find_bvmul(c->vtbl, x, y) == -1", file=0x587e90 "solvers/bv/bvpoly_compiler.c",
    line=318, function=0x588630 "bv_compiler_mk_bvmul") at assert.c:103
0000004 0x000000000053419d in bv_compiler_mk_bvmul (c=0x810ae0, n=12, x=7, y=16) at solvers/bv/bvpoly_compiler.c:318
0000005 0x00000000005348f1 in bvc_process_monomial (d=0x81f720, i=7, c=0x810ae0) at solvers/bv/bvpoly_compiler.c:887
0000006 bvc_process_elem_node (c=0x810ae0, i=7) at solvers/bv/bvpoly_compiler.c:969
0000007 0x0000000000535728 in bv_compiler_convert_elem_nodes (c=<optimized out>) at solvers/bv/bvpoly_compiler.c:1190
0000008 bv_compiler_process_queue (c=<optimized out>) at solvers/bv/bvpoly_compiler.c:1305
0000009 0x00000000004657ed in bv_solver_bitblast (solver=0x803650) at solvers/bv/bvsolver.c:1698
0000010 0x0000000000465b51 in bv_solver_start_search (solver=0x803650) at solvers/bv/bvsolver.c:6374
0000011 0x0000000000475d5f in egraph_start_search (egraph=0x7fd7f0) at solvers/egraph/egraph.c:4378
0000012 0x00000000004275d5 in solve (params=0x7d3340, core=0x7fd2f0) at context/context_solver.c:264
0000013 check_context (ctx=0x7f86a0, params=0x7d3340) at context/context_solver.c:416
0000014 0x00000000005037e0 in check_delayed_assertions (g=<optimized out>) at frontend/smt2/smt2_commands.c:2333
0000015 smt2_check_sat () at frontend/smt2/smt2_commands.c:3677
0000016 0x00000000005094f9 in eval_smt2_check_sat (stack=0x7d2880, f=<optimized out>, n=<optimized out>) at frontend/smt2/smt2_term_stack.c:789
0000017 0x000000000050712a in smt2_parse (parser=0x7d2a20, start=c0) at frontend/smt2/smt2_parser.c:252
0000018 0x0000000000406fac in main (argc=<optimized out>, argv=<optimized out>) at frontend/yices_smt2.c:324

Incorrect answer (due to IDL fix)

Incorrect result indtroduced by the fix c48b198 for issue #29. The following problem returns sat after the fix (with unsat being the real result).

(set-info :source |fuzzsmt|)
(set-info :smt-lib-version 2.0)
(set-info :category "random")
(set-info :status unknown)
(set-logic QF_LIA)
(declare-fun v0 () Int)
(assert (let ((e1 57951842))
(let ((e2 (- v0 v0)))
(let ((e3 (* (- e1) v0)))
(let ((e4 (>= e3 e3)))
(let ((e5 (< v0 e2)))
(let ((e6 (ite e5 e3 e3)))
(let ((e7 (ite e4 v0 v0)))
(let ((e8 (ite e5 e6 e2)))
(let ((e9 (= e2 v0)))
(let ((e10 (= v0 e2)))
(let ((e11 (= v0 e6)))
(let ((e12 (= e3 e2)))
(let ((e13 (distinct e6 e3)))
(let ((e14 (<= e2 e3)))
(let ((e15 (= v0 e8)))
(let ((e16 (> e2 e2)))
(let ((e17 (> e3 e7)))
(let ((e18 (= e5 e11)))
(let ((e19 (and e17 e16)))
(let ((e20 (or e19 e10)))
(let ((e21 (xor e4 e9)))
(let ((e22 (xor e21 e12)))
(let ((e23 (=> e20 e20)))
(let ((e24 (not e14)))
(let ((e25 (ite e15 e15 e13)))
(let ((e26 (xor e22 e18)))
(let ((e27 (ite e24 e23 e23)))
(let ((e28 (and e25 e27)))
(let ((e29 (not e26)))
(let ((e30 (and e29 e28)))
e30
)))))))))))))))))))))))))))))))

(check-sat)

RDL detection does not handle simple cases

RDL solver does not detect a simple case where the constants can be eliminated, such as

(assert (> (- (* 2 x) (* 2 y)) 3))

Not syntactically RDL, just adding the bug as a note.

Assertion failure in symetry breaking

build/x86_64-unknown-linux-gnu-debug/bin/yices_smt2 test.3.5.smt2

yices_smt2: context/symmetry_breaking.c:601: formula_is_range_constraint: Assertion `y != (-1) && t == (-1)' failed.

smtcomp notes

New ones we could do

  • Quantifiers: BV, LIA, LRA
  • UF + nonlinear: QF_UFNIA, QF_UFNRA
  • Nonlinear: QF_NIA, QF_NIRA

Improvements:

  • QF_BV: sat solver, restarts
  • QF_NRA: improvements

Compile static with link-time optimization 5-10%.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.